Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Задача 1. Просто сложение
- Имя входного файла: input.txt
- Имя выходного файла: output.txt
- Ограничение по времени: 1 секунда
- Ограничение по памяти: 256 мегабайт
- Ноль, целковый, полушка,
- четвертушка, осьмушка, пудовичок,
- медячок, серебрячок, золотничок,
- девятичок, десятичок.
- — Юрий Степанович Рыбников,
- Счёт древних русов
- Степан Юрьевич, ученик выдающегося Юрия Степановича, решил на основе счета древних русов разработать систему сложения современных русов, дабы ускорить вычисления
- в существующих математических моделях. Сказано — сделано. И вот перед ним на столе
- лежит лист бумаги, на котором написана таблица суммирования новой системы. Осталось
- только научить компьютер складывать числа согласно этим правилам, и...
- В программу закралась ошибка, и подсчет выполняется неправильно, ставя под угрозу
- результаты тысяч экспериментов. Нужно срочно что-то делать. Помогите Степану Юрьевичу
- написать новую программу, которая не будет допускать ошибок в вычислениях.
- Сложение современных русов работает следующим образом. Пусть складываются два
- числа. Числа записаны в десятичной системе счисления. Процесс вычисления соответствует
- правилам вычисления чисел «в столбик».
- • Числа выравниваются по младшим разрядам.
- • Если числа имеют одинаковую длину, то результирующее число тоже будет иметь такую же длину, а в каждом разряде будет записана цифра из заданной таблицы, которая
- определяется так: если в первом числе в 𝑘-м разряде находится цифра, равная 𝑖, а во
- втором числе в этом же 𝑘-м разряде записана цифра, равная 𝑗, то в 𝑘-й разряд результата будет записана цифра, которая находится на пересечении 𝑖-ой строки и 𝑗-го
- столбца таблицы (0 6 𝑖, 𝑗 6 9).
- • В случае, если длины чисел различные, то в число меньшей длины слева от значащих
- цифр вместо ведущих нулей дописывается специальная цифра ‘@’. Правила сложения
- десятичных цифр со специальной цифрой тоже задаются табличкой.
- • Правило сложения двух цифр ‘@’ не определено
- Ваша задача — вывести сумму двух заданных чисел.
- Формат входных данных
- В первых десяти строках входного файла записано по 10 цифр через пробел — таблица,
- разработанная Степаном Юрьевичем.
- Сначала описываются правила сложения с 0 из первого числа, далее с 1 и так далее до 9.
- В следующих двух строках задано по 10 цифр — результаты сложения цифры ‘@’ из
- первого числа с десятичной цифрой из второго и, соответственно, результаты сложения десятичной цифры из первого числа с цифрой ‘@’ из второго.
- Страница 1 из 14
- Всесибирская открытая олимпиада школьников по информатике
- Отборочный очный этап, 9-11 классы, 27 ноября 2022 г.
- В следующей строке задано целое число 𝑄 — количество заданий (𝑄 6 103
- ).
- Далее в 𝑄 строках заданы по два целых неотрицательных числа, которые нужно сложить.
- Длина каждого числа не превышает 103
- символов.
- Формат выходных данных
- В выходной файл нужно вывести 𝑄 строк, содержащих по одному числу — результату
- сложения соответствующей пары чисел.
- Система оценки
- Баллы за каждую подзадачу начисляются только в случае, если все тесты для этой подзадачи и необходимых подзадач успешно пройдены.
- Подзадача Баллы Ограничения Необходимые подзадачи
- 1 0 Тесты из условия
- 2 20 Числа не превышают 1018 1
- 3 30 Числа имеют одинаковую длину 1
- 4 50 𝑄 6 103
- , длины чисел варьируются от 1 до
- 103
- символов
- 1, 2, 3
- Страница 2 из 14
- Всесибирская открытая олимпиада школьников по информатике
- Отборочный очный этап, 9-11 классы, 27 ноября 2022 г.
- Примеры
- input.txt output.txt
- 0 1 2 3 4 5 6 7 8 9
- 1 2 3 4 5 6 7 8 9 0
- 2 3 4 5 6 7 8 9 0 1
- 3 4 5 6 7 8 9 0 1 2
- 4 5 6 7 8 9 0 1 2 3
- 5 6 7 8 9 0 1 2 3 4
- 6 7 8 9 0 1 2 3 4 5
- 7 8 9 0 1 2 3 4 5 6
- 8 9 0 1 2 3 4 5 6 7
- 9 0 1 2 3 4 5 6 7 8
- 0 1 2 3 4 5 6 7 8 9
- 0 1 2 3 4 5 6 7 8 9
- 4
- 1 1123456789
- 1 1
- 3 3
- 00 7
- 1123456780
- 2
- 6
- 07
- 8 2 4 1 2 7 2 8 0 6
- 3 9 4 9 9 5 2 2 8 0
- 8 4 5 9 8 7 8 4 6 5
- 7 5 4 1 6 9 1 9 1 2
- 8 6 6 5 5 7 2 1 5 6
- 6 8 7 2 0 0 7 3 1 0
- 2 7 8 3 0 7 4 6 3 8
- 9 3 3 6 1 9 3 8 0 7
- 6 3 8 9 0 2 1 0 9 5
- 0 3 3 0 5 7 9 4 2 2
- 0 5 3 9 8 0 7 4 0 6
- 6 9 8 7 5 5 0 8 5 6
- 5
- 693 9072
- 9 3962347979
- 54436397 4286675697
- 0 8347
- 62 118221
- 6244
- 9673984642
- 8312297128
- 0988
- 550384*/
- #include<iostream>
- #include<vector>
- #include<stdint.h>
- #include<fstream>
- #include<string>
- #define all(container) (container.begin(), container.end())
- #define fors(counter, start, finish) for (int counter = start; counter < finish; ++counter);
- #define forb(counter, start, finish) for (int counter = start; counter >= finish; --counter);
- #define vec(type) std::vector<type>
- #define dvec(type) std::vector<std::vector<type>>
- #define ll int64_t
- //#define fin std::cin
- //#define fout std::cout
- void pre(std::string& s1, std::string& s2) {
- bool f = false;
- if (s1.length() < s2.length()) {
- std::swap(s1, s2);
- f = !f;
- }
- std::string temp = s2;
- s2 = "";
- for (int i = 0; i < s1.length() - temp.length(); ++i)
- s2 += '@';
- s2 += temp;
- if (f)
- std::swap(s1, s2);
- return;
- }
- int main() {
- std::ifstream fin("input.txt");
- std::ofstream fout("output.txt");
- dvec(char) tab(10, vec(char) (10));
- for (int i = 0; i < 10; ++i)
- for (int j = 0; j < 10; ++j)
- fin >> tab[i][j];
- dvec(char) null(2, vec(char) (10));
- for (int i = 0; i < 2; i++)
- for (int j = 0; j < 10; j++)
- fin >> null[i][j];
- int n; fin >> n;
- for (int i = 0; i < n; ++i) {
- std::string s1, s2;
- fin >> s1 >> s2;
- pre(s1, s2);
- std::string res = "";
- for (int i = 0; i < s1.length(); ++i) {
- if (s1[i] != '@' && s2[i] != '@') {
- res += tab[s1[i] - '0'][s2[i] - '0'];
- }
- else {
- if (s1[i] == '@') {
- res += null[0][s2[i] - '0'];
- }
- else {
- res += null[1][s1[i] - '0'];
- }
- }
- }
- fout << res << std::endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment