Завдання № 35 відбірково-тренувальних зборів команди міста Києва
Завдання № 35
відбірково-тренувальних зборів
команди міста Києва


за матеріалами ІІІ (міського) етапу 2019 року

1. Неземні огірки

Максимальна оцінка: 100 балів
Обмеження на час: 0,15 сек.
Обмеження на пам’ять: 32 MБ
Вхідний файл: cucumbers.in
Вихідний файл: cucumbers.out
Програма: cucumbers.*

Експедиція землян на далекій планеті наштовхнулася на рослину, зовні схожу на огірок. Рослина живе лише n років, після чого гине. Протягом j-го року свого життя рослина виділяє aj спор, кожна з яких наступного року проростає (перетворюється на рослину) і виділяє a1 спор. На другий рік свого життя рослина виділяє a2 спор, на третій — a3 спор і т.д.

На планеті немає інших живих організмів, що пригнічують чи поглинають цю рослину. Вітер розносить спори на значні відстані, тому рослини не пригнічують ріст одна однієї. Інакше кажучи, ця рослина через певну кількість років могла б заполонити усю планету. Але вулкани періодично викидають в атмосферу отруйні речовини, від яких гинуть усі рослини та більшість їхніх спор. Після розпаду цих речовин процес розмноження рослини відновлюється.

Земляни виявили у рослині сполуку, що пригнічує ріст ракових клітин. Одразу після цього прокинулися вулкани планети і знищили усі живі рослини і всі спори, крім однієї. Через m років після цього грандіозного виверження земляни повернулися на планету з метою зібрати врожай «неземного огірка». На щастя, за цей час не відбулося жодного виверження вулкану. Інакше кажучи, всі рослини мали можливість пройти весь життєвий цикл, а всі спори проростали.

Для транспортування рослин земляни використовують спеціальні контейнери — окремого типу для кожного року життя рослини. В один контейнер можна вкласти bj рослин j-го року життя. Було вирішено забрати якомога більше рослин, заповнивши контейнери повністю. Частково заповнювати контейнери нераціонально, бо інакше рослини буде зіпсовано при транспортуванні.

Завдання
З’ясувати, скільки рослин кожного віку залишиться на планеті після відльоту землян.

Вхідні дані
Єдиний рядок файлу містить у вказаному порядку десяткові записи натуральних чисел: m, n, aj при j = 1, 2, …, n, bj при j = 1, 2, …, n. При цьому справджуються такі нерівності: m < 264, n ≤ 9, aj < 264, НСК(b1, a2, …, bn) < 232. Тут НСК — найменше спільне кратне чисел, перелічених у дужках через кому.

У 32% тестів m < 20. У 32% тестів 20 < m < 2000. У 36% тестів 2000 < m < 1018.

Вихідні дані
Єдиний рядок файлу містить кількості рослин, що залишаться на планеті після відльоту землян, у порядку зростання кількості років життя (від першого до n-го).

Приклади

cucumbers.incucumbers.out
11 2 3 4 5 6 1 0
23 2 3 4 5 6 3 3

Пояснення
В обох випадках мова йде про рослину з дворічним циклом життя, яка протягом першого року виділяє 3 спори, протягом другого року — 4 спори, а контейнери вміщують або по 5 рослин першого року життя, або по 6 рослин другого року життя. Стан системи для рослин з таким дворічним циклом можна описати трійкою чисел:

(кількість спор, кількість рослин 1-го року життя, кількість рослин 2-го року життя).

Для поданих прикладів маємо: (1,0.0) → (3,1,0) → (13,3,1) → (51,13,3) → …

Для усіх станів, крім початкового (одразу після виверження):

Першому тесту — 1-ий рік після виверження — відповідає (3,1,0).
Другому тесту — 3-ій рік після виверження — відповідає (51,13,3).

2. Дільники

Максимальна оцінка: 100 балів
Обмеження на час: 1,5 сек.
Обмеження на пам’ять: 32 MБ
Вхідний файл: divisors.in
Вихідний файл: divisors.out
Програма: divisors.*

Завдання
Знайти усі натуральні числа, що кратні m, мають n натуральних дільників і не мають простих дільників, крім тих, які є дільниками m.

Примітка. Умова «... не мають простих дільників, крім тих, які є дільниками m» забезпечує скінченну кількість чисел у відповіді.

Вхідні дані
Єдиний рядок файлу містить десяткові записи натуральних чисел m і n: 1 < m < 264, 1 < n ≤ 60.

Вихідні дані
Єдиний рядок файлу містить десяткові записи шуканих чисел у порядку зростання. Якщо шуканих чисел немає, рядок містить 0. Вхідні дані такі, що всі числа вихідного файлу менші від 264. У 60% тестів числа вихідного файлу менші від 12 000.

Приклади

divisors.indivisors.out
115 50
215 645 75
315 12675 1125 1215 9375

3. Інкасація

Максимальна оцінка: 100 балів
Обмеження на час: 0,5 сек.
Обмеження на пам’ять: 128 MБ
Вхідний файл: cash.in
Вихідний файл: cash.out
Програма: cash.*

В кінці зміни в касі Вашої фірми назбиралось рівно N банкнот. На жаль, конкурентам вдалось підсунути одну фальшиву банкноту. Вам потрібно знайти саме цю фальшиву банкноту, бо це дозволить дізнатися, хто саме приніс фальшивку. Всі традиційні способи виявити фальшивку не спрацювали. Залишився єдиний спосіб перевірити банкноти — здати їх у банк, який має супер-секретний спосіб перевірки банкнот. За один раз у банк можна передати довільний набір з наявних банкнот. Якщо всі з переданих банкнот були справжніми, то гроші зразу зараховують на рахунок фірми. Вся така процедура займає рівно A секунд. Якщо серед переданих банкнот була фальшива, то всі банкноти повернуть назад і повідомлять, що серед набору була фальшива банкнота. Але не повідомлять, яка саме. Бо метод перевірки — супер-секретний. У цьому випадку вся процедура займе рівно B секунд. Якщо ви подасте банку на перевірку фальшиву банкноту більше ніж K разів, то банк щось запідозрить, а вам доведеться давати пояснення у різних установах. Це займе настільки багато часу, що цього не можна допустити в жодному разі.

Завдання

Визначити найменший час, необхідний для виявлення фальшивої банкноти.

Вхідні дані
Єдиний рядок файлу містить натуральні числа: N, A, B, K. Відомо, що N ≤ 106, K ≤ 10, A < B ≤ 106.

Вихідні дані
Файл має містити десятковий запис натурального числа — найменшої кількості секунд, протягом яких гарантовано можна виявити фальшиву банкноту.

Приклади

cash.incash.out
11 300 3600 100
22 300 3600 103600
310 300 3600 106000
420 300 400 101700
520 10 100 1280

Пояснення до прикладів

У першому тесті в кінці зміни в касі була лише одна банкнота. І відомо, що є одна фальшива банкнота. Тому можна обійтись без інкасації.

У другому тесті в касі — 2 банкноти, одна з них фальшива. Оптимальним планом буде здати довільну банкноту. Якщо вона виявиться фальшивою, то це стане відомо за 3600 сек. Інакше (якщо здана банкнота справжня) нездана банкнота фальшива, що стане відомо за 300 сек. У найгіршому (першому) випадку потрібно 3600 сек.

У третьому тесті в касі — 10 банкнот, серед яких рівно одна фальшива. Оптимальною стратегією буде здавати по одній банкноті до тих пір, поки не здамо фальшиву. В найгіршому випадку потрібно 9 інкасацій за умови, що фальшиву банкноту буде знайдено лише після останньої спроби: 300∙8 + 3600 = 6000 (сек.).

У п’ятому тесті в касі — 20 банкнот. Але цього разу принести до банку фальшиву банкноту можна один раз (K = 1). Зауважимо: якщо принести на перевірку більше ніж одну банкноту і виявиться, що серед них є фальшива, то буде неможливо встановити, яка саме з них є фальшивою. Неможливо, бо не можна ризикувати принести у банк фальшиву банкноту ще раз. Якщо носити по одній банкноті, то нам у найгіршому випадку потрібно буде 19 інкасацій, з яких ми лише після останньої дізнаємося, яка з банкнот є фальшивою. У цьому випадку знадобиться 18·10 + 100 = 280 (сек.).