egogoboy

всесиб 1

Nov 27th, 2022
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.27 KB | None | 0 0
  1. /*Задача 1. Просто сложение
  2. Имя входного файла: input.txt
  3. Имя выходного файла: output.txt
  4. Ограничение по времени: 1 секунда
  5. Ограничение по памяти: 256 мегабайт
  6. Ноль, целковый, полушка,
  7. четвертушка, осьмушка, пудовичок,
  8. медячок, серебрячок, золотничок,
  9. девятичок, десятичок.
  10. — Юрий Степанович Рыбников,
  11. Счёт древних русов
  12. Степан Юрьевич, ученик выдающегося Юрия Степановича, решил на основе счета древних русов разработать систему сложения современных русов, дабы ускорить вычисления
  13. в существующих математических моделях. Сказано — сделано. И вот перед ним на столе
  14. лежит лист бумаги, на котором написана таблица суммирования новой системы. Осталось
  15. только научить компьютер складывать числа согласно этим правилам, и...
  16. В программу закралась ошибка, и подсчет выполняется неправильно, ставя под угрозу
  17. результаты тысяч экспериментов. Нужно срочно что-то делать. Помогите Степану Юрьевичу
  18. написать новую программу, которая не будет допускать ошибок в вычислениях.
  19. Сложение современных русов работает следующим образом. Пусть складываются два
  20. числа. Числа записаны в десятичной системе счисления. Процесс вычисления соответствует
  21. правилам вычисления чисел «в столбик».
  22. • Числа выравниваются по младшим разрядам.
  23. • Если числа имеют одинаковую длину, то результирующее число тоже будет иметь такую же длину, а в каждом разряде будет записана цифра из заданной таблицы, которая
  24. определяется так: если в первом числе в 𝑘-м разряде находится цифра, равная 𝑖, а во
  25. втором числе в этом же 𝑘-м разряде записана цифра, равная 𝑗, то в 𝑘-й разряд результата будет записана цифра, которая находится на пересечении 𝑖-ой строки и 𝑗-го
  26. столбца таблицы (0 6 𝑖, 𝑗 6 9).
  27. • В случае, если длины чисел различные, то в число меньшей длины слева от значащих
  28. цифр вместо ведущих нулей дописывается специальная цифра ‘@’. Правила сложения
  29. десятичных цифр со специальной цифрой тоже задаются табличкой.
  30. • Правило сложения двух цифр ‘@’ не определено
  31. Ваша задача — вывести сумму двух заданных чисел.
  32. Формат входных данных
  33. В первых десяти строках входного файла записано по 10 цифр через пробел — таблица,
  34. разработанная Степаном Юрьевичем.
  35. Сначала описываются правила сложения с 0 из первого числа, далее с 1 и так далее до 9.
  36. В следующих двух строках задано по 10 цифр — результаты сложения цифры ‘@’ из
  37. первого числа с десятичной цифрой из второго и, соответственно, результаты сложения десятичной цифры из первого числа с цифрой ‘@’ из второго.
  38. Страница 1 из 14
  39. Всесибирская открытая олимпиада школьников по информатике
  40. Отборочный очный этап, 9-11 классы, 27 ноября 2022 г.
  41. В следующей строке задано целое число 𝑄 — количество заданий (𝑄 6 103
  42. ).
  43. Далее в 𝑄 строках заданы по два целых неотрицательных числа, которые нужно сложить.
  44. Длина каждого числа не превышает 103
  45. символов.
  46. Формат выходных данных
  47. В выходной файл нужно вывести 𝑄 строк, содержащих по одному числу — результату
  48. сложения соответствующей пары чисел.
  49. Система оценки
  50. Баллы за каждую подзадачу начисляются только в случае, если все тесты для этой подзадачи и необходимых подзадач успешно пройдены.
  51. Подзадача Баллы Ограничения Необходимые подзадачи
  52. 1 0 Тесты из условия
  53. 2 20 Числа не превышают 1018 1
  54. 3 30 Числа имеют одинаковую длину 1
  55. 4 50 𝑄 6 103
  56. , длины чисел варьируются от 1 до
  57. 103
  58. символов
  59. 1, 2, 3
  60. Страница 2 из 14
  61. Всесибирская открытая олимпиада школьников по информатике
  62. Отборочный очный этап, 9-11 классы, 27 ноября 2022 г.
  63. Примеры
  64. input.txt output.txt
  65. 0 1 2 3 4 5 6 7 8 9
  66. 1 2 3 4 5 6 7 8 9 0
  67. 2 3 4 5 6 7 8 9 0 1
  68. 3 4 5 6 7 8 9 0 1 2
  69. 4 5 6 7 8 9 0 1 2 3
  70. 5 6 7 8 9 0 1 2 3 4
  71. 6 7 8 9 0 1 2 3 4 5
  72. 7 8 9 0 1 2 3 4 5 6
  73. 8 9 0 1 2 3 4 5 6 7
  74. 9 0 1 2 3 4 5 6 7 8
  75. 0 1 2 3 4 5 6 7 8 9
  76. 0 1 2 3 4 5 6 7 8 9
  77. 4
  78. 1 1123456789
  79. 1 1
  80. 3 3
  81. 00 7
  82.  
  83. 1123456780
  84. 2
  85. 6
  86. 07
  87.  
  88. 8 2 4 1 2 7 2 8 0 6
  89. 3 9 4 9 9 5 2 2 8 0
  90. 8 4 5 9 8 7 8 4 6 5
  91. 7 5 4 1 6 9 1 9 1 2
  92. 8 6 6 5 5 7 2 1 5 6
  93. 6 8 7 2 0 0 7 3 1 0
  94. 2 7 8 3 0 7 4 6 3 8
  95. 9 3 3 6 1 9 3 8 0 7
  96. 6 3 8 9 0 2 1 0 9 5
  97. 0 3 3 0 5 7 9 4 2 2
  98. 0 5 3 9 8 0 7 4 0 6
  99. 6 9 8 7 5 5 0 8 5 6
  100. 5
  101. 693 9072
  102. 9 3962347979
  103. 54436397 4286675697
  104. 0 8347
  105. 62 118221
  106.  
  107. 6244
  108. 9673984642
  109. 8312297128
  110. 0988
  111. 550384*/
  112.  
  113. #include<iostream>
  114. #include<vector>
  115. #include<stdint.h>
  116. #include<fstream>
  117. #include<string>
  118. #define all(container) (container.begin(), container.end())
  119. #define fors(counter, start, finish) for (int counter = start; counter < finish; ++counter);
  120. #define forb(counter, start, finish) for (int counter = start; counter >= finish; --counter);
  121. #define vec(type) std::vector<type>
  122. #define dvec(type) std::vector<std::vector<type>>
  123. #define ll int64_t
  124. //#define fin std::cin
  125. //#define fout std::cout
  126.  
  127. void pre(std::string& s1, std::string& s2) {
  128.     bool f = false;
  129.     if (s1.length() < s2.length()) {
  130.         std::swap(s1, s2);
  131.         f = !f;
  132.     }
  133.     std::string temp = s2;
  134.     s2 = "";
  135.     for (int i = 0; i < s1.length() - temp.length(); ++i)
  136.         s2 += '@';
  137.     s2 += temp;
  138.     if (f)
  139.         std::swap(s1, s2);
  140.     return;
  141. }
  142.  
  143. int main() {
  144.     std::ifstream fin("input.txt");
  145.     std::ofstream fout("output.txt");
  146.     dvec(char) tab(10, vec(char) (10));
  147.     for (int i = 0; i < 10; ++i)
  148.         for (int j = 0; j < 10; ++j)
  149.             fin >> tab[i][j];
  150.     dvec(char) null(2, vec(char) (10));
  151.     for (int i = 0; i < 2; i++)
  152.         for (int j = 0; j < 10; j++)
  153.             fin >> null[i][j];
  154.     int n; fin >> n;
  155.     for (int i = 0; i < n; ++i) {
  156.         std::string s1, s2;
  157.         fin >> s1 >> s2;
  158.         pre(s1, s2);
  159.         std::string res = "";
  160.         for (int i = 0; i < s1.length(); ++i) {
  161.             if (s1[i] != '@' && s2[i] != '@') {
  162.                 res += tab[s1[i] - '0'][s2[i] - '0'];
  163.             }
  164.             else {
  165.                 if (s1[i] == '@') {
  166.                     res += null[0][s2[i] - '0'];
  167.                 }
  168.                 else {
  169.                     res += null[1][s1[i] - '0'];
  170.                 }
  171.             }
  172.         }
  173.         fout << res << std::endl;
  174.     }
  175.  
  176.     return 0;
  177. }
Tags: olimp
Advertisement
Add Comment
Please, Sign In to add comment