1. Трикутники, 20 балів
Створіть програму triangle.*, яка з'ясує, чи можна з даних двох чи трьох трикутників утворити трикутник «склеюванням» вздовж сторони.
Кожен рядок вхідного файлу triangle.dat містить 2 або 3 трійки натуральних чисел, які є довжинами сторін даних трикутників і менші за 32100. Якщо склеювання можливе, то подвоєна площа кожного трикутника — натуральне число.
Відповідний рядок вихідного файлу triangle.res має містити або довжини сторін новоутвореного трикутника у порядку неспадання, або запис «No solution», якщо такого трикутника немає.
Приклади
triangle.dat | triangle.res |
---|---|
18 24 30 10 24 26 | 26 28 30 |
18 24 30 10 24 25 | No solution |
27 36 45 15 20 25 16 25 39 | 39 42 45 |
27 36 45 15 20 25 16 25 38 | No solution |
2. Підстановки, 12 балів
Кожну підстановку — взаємно однозначне відображення множини An = {1, 2, ... , n} перших n натуральних чисел — можна задати послідовністю n натуральних чисел. j-ий член такої послідовності — число, яке ставилять у відповідність числу j. Композиція (послідовне застосування) двох взаємно однозначних відображень на множині
An є взаємно однозначним відображенням на An. Підстановку f, яка:
Кожний рядок вхідного файлу 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.res | subs.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.dat | polyedr.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 |