Швидке множення (Карацуба, перетворення Фур'є, …)

Перегляд у форматі PDF

Надіслати розв'язок

Бали: 10,00
Time limit: 60.0s
Memory limit: 1G
Input: stdin
Output: stdout

Problem type

Перемножте числа.

Вхідні дані

Якась, не задана на початку, але гарантовано парна додатна кількість рядків, кожен з яких задає одне число, в десятковому записі. Кожні два підряд рядка-числа слід трактувати як множники, які слід перемножити.

Кількість десяткових цифр у кожному окремо взятому числі не перевищує 2 мільйонів, а розмір вхідних даних (сумарно всіх рядків) кожного окремого тесту не перевищує 4 мебібайтів.

Вхідні дані

Виведіть всі знайдені добутки (чисел з 1-го та 2-го рядків, потім з 3-го та 4-го рядків, і так далі).

Приклади

Ввід

2
2
0
12345
1234567891011121314151617
987654321

Вивід

4
0
1219326312124991024977042979187057

Примітки

Кожне з чисел справді може містити до 2 мільйонів цифр. А time-limit цієї задачі справді становить 60 секунд. Справжніх. На кожен окремий тест. І сервер знаходиться в тому ж всесвіті, в якому Ви чекаєте результату, й час для сервера і для Вас іде з однаковою швидкістю. Тому логічно, блін, що розв'язки цієї задачі можуть перевірятися довго.

Мовою Python стандартне множення вже відбувається «під капотом» не у стовпчик, а якимось із ефективніших алгоритмів. Саме тому, цю задачу не можна здавати мовою Python, і не просіть увімкунти її для цієї задачі.

Для мов C# та Java теж єсть бібліотечне довге множення, але, наскільки знаю, воно зроблене суто множенням у стовпчик і не вкладається в розумний ліміт часу.

В розрізі балів за дисципліну «Алгоритми та структури даних», власне бали за задачу можливі лише за власну реалізацію та захист одного з ефективних алгоритмів (Карацуби, дискретного перетворення Фур'є, тощо).

Якщо хтось знайде, що якимись дозволеними мовами програмування єсть таке бібліотечне довге множення, яке вкладається в цей ліміт – прошу повідомити, одній першій особі будуть невеличкі бонусні бали. Якщо хтось придумає ще якийсь спосіб «пропхнути» розв'язок ще якимось способом (Ви не пишете свою реалізацію, але сервер зараховує розв'язок) – прошу повідомити, одній першій особі, хто повідомить мені щось нове (чого я не знав), будуть невеличкі бонусні бали. Але нарахування власне балів за задачу не буде. Також не буде ніяких балів за способи «просто знайти готову реалізацію алгоритму Карацуби» та/або «просто знайти готову реалізацію алгоритму дискретного перетворення Фур'є» та/або «просто попросити штучний інтелект написати ефективний алгоритм довгого множення».


Коментарі

Please read the guidelines before commenting.


Ще немає коментарів.