Завдання ІІІ (міського) етапу 2003 року

1. Склеювання прямокутників, 16 балів

Вхідні дані
Кожен рядок файлу rectang.dat містить 8 натуральних чисел в межах від 1 до 200. Це — розміри чотирьох прямокутників: спочатку — ширина й висота першого, далі — ширина й висота другого, далі — ширина й висота третього, ще далі — ширина і висота четвертого. На кожне число відведено по 3 позиції, причому останню позицію заповнено.

Завдання
Створіть програму rectang.*, яка утворить файл rectang.res дописуванням через пропуск у кожний рядок файла rectang.dat слів «так» чи «ні» залежно від того, чи можливо перші 3 прямокутники «склеїти» вздовж сторін так, щоб отримати четвертий.

Приклад

rectang.datrectang.res
1 2 1 3 1 4 1 9
1 2 1 3 1 4 1 8
1 2 1 3 1 4 1 9 так
1 2 1 3 1 4 1 8 ні

2. Множення, 52 бали

Завдання
Створіть програму сripto.*, яка дешифрує запис дії множення.

Вхідні дані
Файл сripto.dat містить запис виконання дії множення двох натуральних чисел у стовпчик, з якого вилучено знаки множення і додавання, а більшість цифр замінено на символ «*». Результат множення першого співмножника на цифру 0 другого співмножника не відображено. Кожен рядок файлу має не більше, ніж 60 символів, а пропуски є лише перед зашифрованим записом чисел.

Вихідні дані
Файл сripto.res має містити десяткові записи співмножників. Вхідні дані ґарантують: кількість розв'язків не перевищує 1. Якщо розв'язку немає, то файл має містити запис: «No solution!»

Приклад

сripto.datсripto.res
   ***
   *7*
  ----
  ****
  ***
*2**
------
*****5
135 979







3. Сім'я, 92 бали

Завдання
Створіть програму family.*, яка визначає ступінь родичівства чи свояцтва.

Вхідні дані
Два рядки файла family.who містять по одному імені двох різних персонажів.

Всі рядки family.dat мають такий вигляд:

Родовий відмінок імен в українській мові утворюють:

Вхідні дані не містять імен з III-ої відміни й імен II-ої відміни, які у називному відмінку закінчуються на м'який знак. Імена складено з одного слова. Розрізняють персонажі з однаковими іменами, якщо ці імена записано різними за висотою літерами (великими чи малими). Імена персонажів містять не більше 20 літер. Кількість персонажів менша за 100.

Вихідні дані
Файл family.res повинен мати такий вигляд:

Приклад

family.whofamily.datfamily.res
Борис
Олександр
Надія - дружина Бориса
Олександр - син Надії
Борис - батько Олександра

4. Поверхня куба, 81 бал
Координати вершин куба дорівнюють 0 або d. На поверхні куба розташовано замкнену ламану без самоперетинів, що має n вершин. Координати всіх вершин цієї ламаної — невід'ємні цілі числа.

Завдання
Створити програму cubesurf.* для обчислення площі фіґур, на які ламана розбиває поверхню куба.

Вхідні дані
Файл cubesurf.dat містить у вказаному порядку натуральні числа d, n, де d < 109, n < 105, і послідовність n трійок координат вершин цієї ламаної у порядку обходу ламаної. Для кожної вершини спочатку вказано абсцису x, потім — ординату y, потім — аплікату z.

Вихідні дані
Файл cubesurf.res має містити у порядку неспадання подвоєні площі фіґур, на які ламана розбиває поверхню куба.

Приклад

cubesurf.datcubesurf.res
1000 3 1 0 0 0 1 0 0 0 13 11999997

5. Остача, 34 бали
Для зручності запису умови позначимо a b через a ^ b.

Завдання
Створіть програму remain.*, яка обчислить остачу від ділення на a0 числа

a1^ (a2^ (a3^…(an – 2^ (an – 1^ an))…)).

Вхідні дані
Файл remain.dat містить у вказаному порядку натуральні числа n, a0, a1, a2, …, an у межах від 1 до 216, n < 9.

Вихідні дані
Файл remain.res має міститти лише шукану остачу.

Приклад

remain.datremain.res
5 4 3 5 7 9 113

6. Підпослідовність, 35 балів

Завдання
Створити програму subseq.* для обчислення довжини найдовшої спільної підпос­лідов­ності двох послідов­ностей {xj}kj = 1 і {yj}lj = 1.

Вхідні дані
Файл subseq.dat містить у вказаному порядку невід'ємні цілі числа k, x1, x2, …, xk, l, y1, y2, …, yl, де k + l < 16 000, а члени послідовностей менші за 65 432.

Вихідні дані
Файл subseq.res має міститти лише шукану довжину найдовшої спільної підпос­лідов­ності.

Приклад

subseq.datsubseq.res
5 1 2 3 4 5
4 1 3 5 7
3