Перший тур
25 березня 1994 року
ВЗАЄМНИЙ ЗАЛIК БОРГIВ (20 балiв).
    З-за економiчної кризи багато пiдприємств не можуть отримати
борги вiд покупцiв i розрахуватися з продавцями за свої борги. Банк
має намiр зменшити загальний борг своїх клiєнтiв, виконавши взаємний
залiк боргiв. Для цього банк може змiнювати борги клiєнтiв будь-яким
чином при умовi, що для кожного клiєнта лишиться незмiнним сальдо -
рiзниця мiж сумою боргiв йому та сумою його боргiв.
    ЗАВДАННЯ: написати програму, що перерахує заданий список боргiв
в такий, що має якомога меншу загальну суму боргiв.
Технiчнi умови
- Ваша програма повинна прочитати вхiднi данi для декiлькох
тестiв з одного текстового ASCII-файлу DEBTS.DAT. Данi для рiзних
тестiв вiдокремлено порожнiм рядком. Кожен рядок файлу вiдповiдає од-
ному борговому зобов'язанню та мiстить 3 натуральних числа: номер
боржника, номер пiдприємства, якому вiн винен, та суму боргу. Сусiднi
числа вiдокремлено пропуском.
- Ваша програма повинна записати результати для всiх тестiв до
одного тестового ASCII-файлу DEBTS.SOL, вiдокремлюючи результати
рiзних тестiв порожнiм рядком. Результат кожного тесту має мiстити
список боргiв, що залишаться пiсля взаємних залiкiв. Цей список пови-
нен мати таку ж структуру, що й вхiдний. За ним треба вивести список
сальдо всiх клiєнтiв, що були боржниками або мали боржникiв. Кожен
рядок цього списку мiстить номер пiдприємства та його сальдо, вiдок-
ремленi пропуском. В кiнцi результатiв тесту треба в окремому рядку
вивести загальну суму боргiв.
- Кiлькiсть пiдприємств не перевищує 100, грошовi суми не пере-
вищують 30000 одиниць.
- Iм'я файлу з вихiдним текстом програми - DEBTS*.
Приклад вхiдного та вихiдного файлiв
Вхiднi данi (файл DEBTS.DAT):
1 2 100
2 3 50
3 1 75
1 2 15
2 3 11
4 1 14
Вихiднi данi (файл DEBTS.SOL) повиннi виглядати так:
1 2 25
3 2 25
1 -25
2 50
3 -25
50
1 2 1
4 2 4
4 3 11
1 -1
2 4
3 11
4 -14
15
ПОРIВНЯННЯ КОМПОСТЕРIВ (20 балiв)
    Компостер в автобусi робить у квитку отвори, що мiстяться у дея-
ких вузлах квадратної сiтки розмiром M*N вузлiв. Компостери вважа-
ються однаковими, якщо всi зробленi ними отвори в квитках можна
сумiстити, вiдобразивши один квиток на iнший комбiнацiєю паралельних
переносiв, поворотiв на прямий кут та симетрiй вiдносно горизонталь-
ної та вертикальної осей. Закомпостований квиток має принаймнi один
отвiр.
    ЗАВДАННЯ: Написати програму, що визначить, чи однаковi два зада-
них компостери.
Технiчнi умови
- Ваша програма повинна прочитати вхiднi данi для декiлькох
тестiв з одного текстового ASCII-файлу COMPOST2.DAT. Данi для рiзних
компостерiв вiдокремлено порожнiм рядком. Кожен рядок файлу
вiдповiдає одному рядковi компостера та мiстить одиницi (отвори) та
нулi (вузли без отворiв). Сусiднi числа вiдокремлено пропуском.
- Ваша програма повинна записати результати для всiх тестiв до
одного текстового ASCII-файлу COMPOST2.SOL. Результат кожного тесту -
рядок з його порядковим номером та словом "Однаковi" або "Рiзнi".
- Розмiри сiтки не перевищують 15 вузлiв.
- Iм'я файлу з вихiдним текстом програм - COMPOST2.*
Приклад вхiдного та вихiдного файлiв
Вхiднi данi (файл DEBTS.DAT):
Вхiднi данi (файл COMPST2.DAT):
0 0 0 {перший тест, перший компостер}
0 0 1
0 0 0
0 1 0 0 {перший тест, другий компостер}
0 0 0 0 {хоч вiн i має iнший розмiр, нiж перший}
0 0 0 0 {але вважається однаковим з ним}
1 0 0 0 0 0 {другий тест, перший компостер}
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 1 0
1 0 0 0 0 1 {другий тест, другий компостер}
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
Вихiднi данi (файл COMPST2.SOL) повинен виглядати так:
1. Однаковi
2. Рiзнi
КIЛЬКIСТЬ КОМПОСТЕРIВ (60 балiв)
    ЗАВДАННЯ: Написати програму, що за умов попередньої задачi виз-
начить кiлькiсть рiзних компостерiв, якi можна утворити на сiтцi
розмiром M*N вузлiв.
Технiчнi умови
- Ваша програма повинна прчитати вхiднi данi для декiлькох
тестiв з одного текстового ASCII-файлу COMPOST3.DAT. Кожен рядок фай-
лу вiдповiдає одному тесту та мiстить числа M та N, вiдокремленi про-
пуском.
- Ваша програма повинна записати результати для всiх тестiв до
одного текстового ASCII-файлу COMPOST3.SOL. Результат кожного тесту -
рядок з його порядковим номером та кiлькiстю компостерiв.
- M та N не перевищують 15.
- Iм'я файлу з вихiдним текстом програми - COMPOST3.*
Приклад вхiдного та вихiдного файлiв
Вхiднi данi (файл COMPOST3.DAT):
1 1
2 2
Вихiднi данi (файл COMPOST3.SOL) повиннi виглядати так:
1 1
2 5
Другий тур
26 березня 1994 року
АРХIВАТОР
- Напишiть програму-архiватор, що перетворює вхiдний текстовий
файл у вихiдний (архiвний) файл якомога меншого розмiру, та програ-
му-дезархiватор, що вiдновлює за архiвним файлом початковий (50
балiв).
- Напишiть програму-архiватор, що перетворює всi текстовi файли
з iменами, вiдповiдними масцi "*.txt", що знаходяться в поточному ка-
талозi, в один вихiдний (архiвний) файл якомога меншого розмiру, та
програму-дезархiватор, що вiдновлює за архiвним файлом всi включенi
до нього текстовi файли (30 балiв).
- З рiзних причин iнформацiя в архiвних файлах може спотворюва-
тися. Додайте до дезархiватора засоби, що сповiщають користувача в
разi спотворення iнформацiї в архiвному файлi (20 балiв).
Технiчнi умови
- Вхiднi текстовi файли можуть мiстити великi та малi українсь-
ки, росiйськi та латинськi лiтери, цифри, крапки, коми, крапки з ко-
мами, двокрапки, знаки питання та оклику, тире, подвiйнi лапки,
круглi дужки, пропуски, символи повернення каретки (десятковий код -
10) та переведення рядка (код 13). Кожен файл завершується символом
кiнця файлу (код 26). Довжина рядкiв не перевищує 255 символiв. Вико-
ристовуйте кодування українських лiтер згiдно з наданим Вам драйвером.
- Архiвний файл повинен завершуватися символом кiнця файлу; в
серединi архiвного файлу цей символ мiститися не може.
- Програми повиннi запитувати необхiднi iмена текстових та
архiвних файлiв в дiалозi.
- Вiдкомпiльованi програми мають обробляти кожен набiр текстiв
не довше, нiж за 5 хвилин; програми, що iнтерпретуються - не довше,
нiж за 10 хвилин.
- Iмена файлiв з вихiдними текстами програм - ARC.* та UNARC.*
|