Орієнтовні завдання
ІІ (районного) етапу 2004 року

1. Трикутники, 20 балів
Створіть програму triangle.*, яка з'ясує, чи можна з даних двох чи трьох трикутників утворити трикутник «склеюванням» вздовж сторони.

Кожен рядок вхідного файлу triangle.dat містить 2 або 3 трійки натуральних чисел, які є довжинами сторін даних трикутників і менші за 32100. Якщо склеювання можливе, то подвоєна площа кожного трикутника — натуральне число.

Відповідний рядок вихідного файлу triangle.res має містити або довжини сторін новоутвореного трикутника у порядку неспадання, або запис «No solution», якщо такого трикутника немає.

Приклади

triangle.dattriangle.res
18 24 30 10 24 2626 28 30
18 24 30 10 24 25No solution
27 36 45 15 20 25 16 25 3939 42 45
27 36 45 15 20 25 16 25 38No solution

2. Підстановки, 12 балів
Кожну підстановку — взаємно однозначне відображення множини An = {1, 2, ... , n} перших n натуральних чисел — можна задати послідовністю n натуральних чисел. j-ий член такої послідовності — число, яке ставилять у відповідність числу j. Композиція (послідовне застосування) двох взаємно однозначних відображень на множині An є взаємно однозначним відображенням на An. Підстановку f, яка:

називають циклічною підстановкою k елементів чи циклом довжини k з елементами i1, i2, … , ik – 1, ik і позначають через (i1 i2ik – 1 ik).

Створіть програму subs.*, яка:

Кожний рядок вхідного файлу subs.dat, починаючи з першої позиції, містить по одній послідовності перших n натуральних чисел, записаних без прогалин, але з роздільниками | чи без них залежно від справдження нерівності n > 9. Кожна така послідовність задає перестановку на множині An. Кількість рядків subs.dat не перевищує 120, n < 50.

Вихідний файл subs.mul має містити квадратну таблицю натуральних чисел, кількість рядків і стовпчиків у якій дорівнює кількості рядків subs.dat. На запис кожного числа відввести однакову кількість позицій, яка на 1 більша від кількості цифр кількості рядків файлу subs.dat. У j-му рядку k-го стовпчика цієї таблиці записати номер підстановки, що є композицією (послідовним застосуванням) k-ої підстановки, а потім j-ої з переліку, поданого файлом subs.dat.

Кожний рядок вихідного файлу subs.res утворити з відповідного рядка subs.dat дописуванням у вказаному порядку:

Приклади

subs.ressubs.mul
123 1
132 2 (23)
321 3 (13)
213 4 (12)
231 5 (123)
312 6 (132)
1 2 3 4 5 6
2 1 5 6 3 4
3 6 1 5 4 2
4 5 6 1 2 3
5 4 2 3 6 1
6 3 4 2 1 5
1|2|3|4|5|6|7|8|9|10 1
1|2|3|4|5|6|7|8|10|9 2 (9|10)
1 2
2 1

3. Многогранник-1, 26 балів
Всі грані деякого многогранника занумеровано послідовними натуральними числами, починаючи з 1. j-ий рядок вхідного файлу polyedr.dat містить перелік номерів всіх гран ей, що мають з j-ою гранню спільне ребро. Тут натуральне j змінюється від 1 до кількості граней.

Створіть програму polyedr.*, яка утворить вихідний файл polyedr.ver, в якому кожний рядок містить у порядку зростання номери всіх граней, що сходяться до певної вершини многогранника (містять цю спільну вершину). Порядок рядків при цьому такий:

Задачу розв'язати для кількості граней, що не перевищує 255. На кожне число файлу polyedr.ver відводити по 4 позиції, причому останню заповнити.

Приклад

polyedr.datpolyedr.ver
2 3 4
1 3 4
1 2 4
1 2 3
1 2 3
1 2 4
1 3 4
2 3 4