You are on page 1of 6

Задаци на савезном такмичењу из информатике

Београд, први дан, 13. април 2002.

Задатак 1. Трка
Ове године држава Савезна Унија домаћин је велике бициклистичке трке.
Држава има n градова означених бројевима од 1 до n. Градови су међусобно повезани
путевима, и то тако да постоји тачно један начин да се из било ког града стигне у било
који други. Организатори трке су одлучили да маршрута трке буде најдужа могућа.
Написати програм који за дату мрежу путева налази дужину најдуже маршруте
за трку.
Улазни подаци се налазе у текстуалном фајлу ZAD1.DAT. У првом реду се
налази број n (2 ≤ n ≤ 8000), а у сваком од следећих n-1 редова природни бројеви a, b и
d што означава да су градови a и b директно повезани путем дужине d (1 ≤ d ≤ 1000).
Излазни текстуални фајл ZAD1.RES има само један ред који садржи дужину
најдуже маршруте.
Пример:
ZAD1.DAT ZAD1.RES
10 27
1 2 3
1 3 7
1 4 1
2 5 5
2 6 8
3 7 6
3 8 9
4 9 2
4 10 4

Задатак 2. Игра
Мирко и Славко играју следећу игру: на столу се налазе n бројева поређаних у
низ. Прво Мирко узме један број, са леве или са десне стране низа. Затим Славко узме
један број са леве или десне стране преосталог низа, и тако наизменично док не покупе
све бројеве са стола. Написати програм који израчунава, под претпоставком да и
Мирко и Славко играју оптимално, колики је максимални збир бројева који Славко
може да скупи.
Улазни текстуалан фајл ZAD2.DAT садржи у првом реду број n (n ≤ 128), а у
другом реду n бројева, у опсегу од 0 до 100.
Излазни текстуалан фајл ZAD2.RES треба да садржи само један број,
максималан збир бројева које Мирко може да освоји.
Пример:
ZAD2.DAT ZAD2.RES
4 25
10 20 1 5
Задатак 3. Тачке
У равни је дато n тачака чије су координате реални бројеви. Свака од њих има
једну од две боје, црвену или плаву. Тачке су распоређене у равни тако да постоји
права, која не садржи ниједну од датих тачака, са чије су једне стране само тачке
црвене боје, а са друге само тачке плаве боје. Такође, међу њима не постоје три
колинеарне тачке. Вашем програму је познат број тачака, као и координате сваке тачке.
Ваш програм може да испита боју једне појединачне тачке, и помоћу што мањег броја
оваквих испитивања треба да одреди укупан број црвених, односно плавих тачака.

Библиотека
Доступна вам је библиотека са шест операција:
• init, која се позива само на почетку, без параметра, и иницијализује
библиотеку. Позив ове процедуре треба да буде прва наредба вашег
програма, и она се више не сме позивати.
• getn, која се позива без параметара и враћа n (1 ≤ n ≤ 1000), број тачака у
равни.
• getx, која се позива са индексом тачке, а враћа x координату тачке са тим
индексом (индекси тачака су од 1 до n). x и y координата сваке тачке ће бити
између -104 и 104.
• gety, која се позива са индексом тачке, а враћа y координату те тачке.
• getcolor, која се позива са индексом тачке, а враћа 0 ако је тачка црвене
боје, односно 1 ако је тачка плаве боје.
• answer, која се позива на крају. Има два параметра, а то су број тачака
црвене и број тачака плаве боје. Ова процедура обезбеђује правилан
завршетак рада и треба да буде последња наредба вашег програма.
Ваш програм треба да са што мање позива процедуре getcolor одреди број
црвених и плавих тачака. Процедуре getn, getx и gety могу се позивати
произвољан број пута.
Задатак се бодује на следећи начин: нека је S број позива процедуре за тест
пример.
Ако је 1 ≤ S ≤ 30, за тест пример добијате 10 поена.
Ако је 30 < S ≤ 60, за тест пример добијате 8 поена.
Ако је 60 < S ≤ 90, за тест пример добијате 4 поена.
Ако ваше решење није тачно, или је 90 < S, или је неки позив процедуре из
библиотеке био неправилан, за тест пример не добијате поене.
Упутство за Pascal програмере Упутство за C програмере
На почетак изворног кода треба Креирајте нови пројекат, и у
укључити наредбу: њега додајте ваш програм као и фајл
uses points; points.obj. Користите меморијски
Заглавља процедура су: модел large. На почетак изворног кода
procedure init;
треба укључити наредбу:
function getn: integer; #include "points.h"
function getx (i: integer): double;
function gety (i: integer): double; Заглавља процедура су:
function getcolor (i: integer): integer; void init();
procedure answer (red, blue: integer); int getn();
double getx (int i);
double gety (int i);
int getcolor (int i);
void answer (int red, int blue);

Тестирање
Уколико желите да тестирате ваш програм за време такмичења, потребно је да
креирате фајл ZAD3.DAT. Први ред фајла треба да садржи број тачака, n. У сваком од
следећих n редова треба да се налазе по три броја. Прва два (реална) броја
представљају x и y координату тачке. Трећи број треба да буде 0 ако је тачка црвене
боје, односно 1 ако је тачка плаве боје. Библиотека неће проверавати исправност
улазних података. На крају рада ће на екрану бити исписано да ли је ваш програм
тачно решио задатак, као и број позива процедуре getcolor.

Пример: Комуникација између вашег програма и библиотеке могла би да тече овако:

init
getn = 3
getcolor (1) = 0
getcolor (2) = 1
getcolor (3) = 0
answer (2, 1)

Задаци се раде 300 минута. Сваки проблем се тестира са по 10 тест


примера. За сваки тест пример је могуће освојити највише 10 поена. Ако
се у неком задатку освоји 100 поена добија се још 20 бонус поена.
Временско ограничење за први задатак је 1 секунда, за други задатак 1
секунда, а за трећи задатак 5 секунди.
Задаци на савезном такмичењу из информатике
Београд, други дан, 14. април 2002.

Задатак 4. Речник
Пре много година негде у космосу живеле су три напредне цивилизације:
Толеанци, Боргови и Клингонци. Толеанци и Боргови су увек били доброћудни:
уживали су у природи, мирисали цвеће, водили миран и хармоничан живот. Највише
од свега волели су да читају и пишу поезију. Често су борговски боеми путем
интернета слали своје песме толеанским пријатељима.
Међутим, злочести Клингонци су пронашли начин да прислушкују
комуникацију између Толеанаца и Боргова. Од тада, омиљена забава Клингонаца
постала је исмевање толеанске и борговске поезије.
Како се и дало очекивати, такво понашање Клингонаца, није дуго могло бити
толерисано. Због тога су Боргови измислили потпуно нови језик на коме ће убудуће
писати поезију. Међутим, користећи исти сигурносни пропуст, Клингонци су успели
да се дочепају речника новонасталог језика. Једини проблем због кога нису могли у
потпуности да дешифрују језик био је то што нису знали којим су редом поређана
слова у његовом алфабету.
Тај проблем је остао актуелан све до недавно, када је процурила вест да ове
године у Београду треба да се одржи Савезно такмичење из информатике. Клингонци
су схватили да ће искусни програмери на основу датог речника брзо реконструисати
редослед слова у алфабету.
У улазном текстуалном фајлу ZAD4.DAT налази се опис речника. У првом реду
фајла налази се природан број n (1 ≤ n ≤ 7000) - број слова у алфабету и природан број
m (1 ≤ m ≤ 9000) - број речи у речнику. У сваком од следећих т редова налази се опис
једне речи. Први број у реду, број l (1 ≤ l ≤ 50) представља дужину речи. Иза њега
следи l природних бројева (из интервала од 1 до n) који представљају слова дате речи.
Речи у овим редовима наведене су по лексикографском поретку у односу на непознати
алфабет.
У излазни текстуални фајл ZAD4.RES исписати један могућ редослед слова у
алфабету за дати речник (гарантује се да ће увек постојати бар један). Свако слово
записати у посебан ред тако да у i-том реду буде i-то слово алфабета. Наравно, свако
слово треба записати као одговарајући број из интервала од 1 до n.
Пример:
ZAD4.DAT ZAD4.RES
4 7 1
4 1 1 2 1 3
5 1 1 4 3 2 2
4 1 4 2 2 4
3 2 3 1
6 2 3 1 1 3 4
4 2 3 3 2
3 2 3 2
Задатак 5. Кутије
У једној фабрици играчака, играчке се пакују у кутије ваљкастог облика које
могу бити различитих димензија. Димензија кутије је одређена пречником њене основе
и висином израженим у милиметрима. У магацину ради чувар коме је страшно досадно
и он се сетио једне разоноде. Наиме, његова занимација је паковање мањих кутија у
веће. Једна кутија може да стане у другу само ако нема ни већи пречник основе ни већу
висину од друге кутије. Кутија која садржи у себи кутије, може даље да се смешта у
друге кутије. Пошто му је и то досадило, он би сада да игра фудбал у магацину (сам са
собом). Да би имао више простора, мора да, што је више могуће, смањи број кутија.
Зато ће он, по последњи пут, применити његово патентирано паковање ''кутија у
кутију'', а циљ је да после паковања остане минималан број кутија.
Да би проверио свој учинак, чувар тражи од вас да програмом нађете минималан
број кутија на крају, ако су познате димензије свих кутија.
У првом реду улазног текстуалног фајла ZAD5.DAT налази се природан број n (1
≤ n ≤ 10000) и то је број кутија у магацину. У наредних n редова налазе се по два
природна броја d и h раздвојена бланком (1 ≤ d, h ≤ 10000), d је пречник, а h је висина
одговарајуће кутије изражена у милиметрима.
У једином реду излазног текстуалног фајла ZAD5.RES уписати најмањи број
кутија које могу остати након паковања.
Пример: Дато је 5 кутија: једна са пречником 20 и висином 30, друга са
пречником 30 и висином 20, трећа са пречником 40 и висином 40, четврта са
пречником 10 и висином 30 и пета са пречником 15 и висином 15. Тада је могуће
сместити четврту кутију у прву, а затим прву у трећу, као и пету кутију у другу. Тако
остају две видљиве кутије: друга и трећа. Међутим, никако није могуће сместити све
кутије у једну, па је 2 овде решење.
ZAD5.DAT ZAD5.RES
5 2
20 30
30 20
40 40
10 30
15 15

Задатак 6. Мишоловац
Дат је лавиринт димензија m x n. Тачно једно поље лавиринта садржи сир, док
су остала поља пролаз или зид. У њему се налазе мачка и миш на одређеним почетним
позицијама. Они се крећу наизменично, по потезима, при чему је миш први. У свом
потезу мачка или миш могу да се помере на суседно поље (при томе су дијагонална
поља такође суседна), или да остану на истом пољу. При померању мачке на поље на
коме је миш она га једе, док при померању миша на поље на коме је сир он једе сир.
Мачка не сме да се помери на поље на коме је сир. У сваком тренутку мачка зна тачну
позицију миша и обрнуто. Циљ миша је да поједе сир, а мачке да га спречи, без обзира
да ли ће га појести или не. Испитати шта ће се од ова два десити при њиховом
оптималном кретању.
У првом реду улазног фајла ZAD6.DAT налазе се димензије лавиринта m и n,
при чему је m број врста, а n број колона (1 ≤ m, n ≤ 50). У сваком од следећих m редова
налази се по n знакова који описују лавиринт. Знак "*" представља поље на коме је сир,
"X" поље које садржи зид, док "." представља празно поље. Остали знакови се неће
појављивати. У следећем реду налази се број p (1 ≤ p ≤ 8), и то је број парова почетних
позиција мачке и миша које се испитују. У сваком од следећих p редова налазе се по
четри броја. Први пар бројева представља координате миша (прво број врсте, затим
број колоне), а други мачке. Горње-лево поље лавиринта има координате (1, 1), а доње-
десно (m, n).
Излазни фајл ZAD6.RES треба да садржи p редова. За i-ти пар позиција мачке и
миша из улазног фајла у i-ти ред излазног фајла треба уписати 1 уколико миш успева
да поједе сир, а 0 уколико мачка може да га спречи.

Пример:
ZAD6.DAT ZAD6.RES
4 3 1
.*. 0
...
.X.
...
2
3 1 3 3
4 2 2 2

Задаци се раде 300 минута. Сваки проблем се тестира са по 10 тест


примера. За сваки тест пример је могуће освојити највише 10 поена. Ако
се у неком задатку освоји 100 поена добија се још 20 бонус поена.
Временско ограничење за сваки задатак је 1 секунда.

You might also like