Eesti koolinoorte matemaatikaolümpiaadidid Eesti koolinoorte informaatikaolümpiaadid Eesti koolinoorte füüsikaolümpiaadid Eesti koolinoorte keemiaolümpiaadid Astronoomiahuvilistele Eesti koolinoorte bioloogiaolümpiaadid Eesti koolinoorte geograafiaolümpiaadid Täppisteaduste Kooli informaatikaosakond

14. märts 1998. a.

Lõppvooru noorema rühma ülesanded


1. "ROHELINE LAINE" (30 punkti, 5 sekundit)

Auto sõidab punktist A punkti B mööda teed, millel on N foori. Iga foor töötab kindla graafiku järgi, näidates P sekundit punast tuld, seejärel R sekundit rohelist tuld, seejärel jälle P sekundit punast tuld jne. Igal keskööl tehakse fooridele algkäivitus ja nad alustavad tööd punase tule süütamisega. Kui auto jõuab foori alla hetkel, kui seal põleb või süttib punane tuli, ei või ta edasi sõita. Kui auto jõuab foori alla hetkel, kui seal põleb või süttib roheline tuli, sõidab ta peatumata edasi. Kirjutada programm, mis leiab, millisel hetkel peab auto välja sõitma, et ta satuks "rohelisse lainesse", st sõidaks kõigi fooride alt ilma peatumata läbi.

Sisend: Tekstifaili FOOR.SIS esimesel real on auto teele jäävate fooride arv N (0 £ N £ 100) ja järgmisel N real igaühel kolm tühikutega eraldatud täisarvu. Esimene arv (Ki, 0 £ Ki £ 1000) näitab, mitu sekundit kulub punktist A startinud autol selle foorini jõudmiseks, kui ta ei pea teel ühegi teise foori taga ootama. Teine arv (Pi, 0 £ Pi £ 60) näitab, mitu sekundit järjest põleb selles fooris punane tuli. Kolmas arv (Ri, 0 £ Ri £ 60) näitab, mitu sekundit järjest põleb selles fooris roheline tuli. Arvud Ki on kõik erinevad ja read on failis nende kasvamise järjekorras.

Väljund: Tekstifaili FOOR.VAL esimesele reale väljastada täisarv, mis näitab, mitu sekundit pärast fooride käivitamist peab auto punktist A välja sõitma, et ta satuks "rohelisse lainesse". Väljastada tuleb vähim võimalik arv (või -1, kui "rohelist lainet" ei olegi).

Näide:

FOOR.SIS

3

110 30 30

250 40 20

350 20 20

FOOR.VAL

40


2. AKNAHALDUR (30 punkti, 5 sekundit)

Arvuti ekraanil on teatav hulk aknaid, mis võivad üksteist osaliselt või täielikult katta. Kasutaja juhib akende paigutust ekraanil hiire abil. Vasaku hiirenupu klõpsutamine mingis aknas tõstab selle akna kõige pealmiseks, parema hiirenupu klõpsutamine aga viib akna kõige alumiseks. Kirjutada programm, mis leiab akende esialgse paigutuse ja kasutaja poolt tehtud hiireklõpsude põhjal akende lõpliku paigutuse ekraanil.

Sisend: Tekstifaili AKEN.SIS esimesel real on ekraanil olevate akende arv N (0 £ N £ 100) ja järgneval 2*N real on akende andmed, iga akna andmed kahel real. Esimesel real on akna nimi (string pikkusega £ 40 sümbolit) ja teisel real neli tühikutega eraldatud täisarvu Xi1, Yi1, Xi2, Yi2. (Xi1, Yi1) on akna vasaku ülemise ja (Xi2, Yi2) parema alumise nurga koordinaadid (0 £ Xi1 < Xi2 £ 1000, 0 £ Yi1 < Yi2 £ 1000). Akende andmed on failis nende sügavuse kasvamise järjekorras (st kõige pealmine aken esimesena). Tekstifaili HIIR.SIS esimesel real on kasutaja tehtud hiireklõpsude arv K (0 £ K £ 1000) ja järgmisel K real igaühel kolm tühikutega eraldatud täisarvu Xj, Yj, Zj, kus (Xj, Yj) on hiirekursori koordinaadid klõpsutamise hetkel (0 £ Xj £ 1000, 0 £ Yj £ 1000) ja Zj on 0, kui klõpsutati vasakut hiirenuppu ning 1, kui klõpsutati paremat hiirenuppu. Iga hiirenupu klõpsutamine mõjub kõige pealmisele aknale, mille sees hiirekursori koordinaadid klõpsutamise hetkel on (akna ääred loetakse akna sisse kuuluvaks). Hiire klõpsutamine kõigist akendest väljapoole jääval ekraaniosal ei oma mingit mõju.

Väljund: Tekstifaili AKEN.VAL väljastada akende nimed nende sügavuse kasvamise järjekorras (st kõige pealmine aken esimesena) vastavalt nende lõplikule paigutusele. NB! Aknaid tegelikult ekraanile MITTE JOONISTADA!

Näide:

AKEN.SIS
3
Esimene Aken
300 100 600 300
Teine Aken
200 200 500 400
Kolmas Aken
100 300 400 500

HIIR.SIS
5
500 200 1
100 200 0
300 300 0
500 500 1
100 500 0

AKEN.VAL
Kolmas Aken
Teine Aken
Esimene Aken


3. KLEEPRIBAD (40 punkti, 5 sekundit)

Paberile on trükitud ühe või enama tühikuga eraldatud arvudest koosnev rida, kus arvud koosnevad sümbolitest 0 kuni 9. Peale selle on antud hulk kleepribasid, millele on otsast otsani trükitud mingi üks väike ladina täht (erinevatel ribadel on erinevad tähed). Kõik sümbolid (numbrid, tähed ja tühikud) on võrdse laiusega. Ribadega tuleb katta arve nii, et

a) iga riba katab mingi arvu esimesest numbrist kuni mingi arvu viimase numbrini,

b) ribad ei kata üksteist.

Ülesandeks on leida selline ribade kleepimise viis, et kaetud oleks võimalikult palju numbreid. NB! Numbreid, mitte arve!

Sisend: Tekstifaili RIBA.SIS esimesel real (pikkus £ 80) on paberile trükitud numbrite ja tühikute jada, kusjuures esimene ja viimane sümbol ei ole tühikud. Teisel real on paberiribade arv N (1 £ N £ 20). Järgmisel N real (igaühe pikkus £ 80) on paberiribadele trükitud tähed.

Väljund: Tekstifaili RIBA.VAL esimesele reale kirjutada sisendfaili esimene rida, teisele reale leitud lahendus, kujutades ribasid ribale trükitud tähtedega ja jättes katmata sümbolid alles, ja kolmandale reale kaetud numbrikohtade arv.

Näide:

RIBA.SIS
1 4004 303  22  1 7111117   82222228
4
aaaaaaaaaaaaaaaaaa
bbbbbbbbbb
cccc
dd

RIBA.VAL
1 4004 303  22  1 7111117   82222228
1 cccc aaaaaaaaaaaaaaaaaa   82222228
17

Hindamine: Iga testi punktide arvu määrab vastuses kaetud numbrite arvu protsent parima võimaliku paigutuse korral kaetud numbrite arvuga võrreldes. Näites toodud vastus saaks 68 protsenti selle testi võimalikest punktidest, sest parim kate on

1 4004 303  22  1 7111117   82222228
bbbbbbbbbb  dd  1 aaaaaaaaaaaaaaaaaa
25

Kui leitud kate ei vasta ülesande tingimustele (ribade pikkusi on muudetud, nad ei alga arvude alguses, ei lõpe arvude lõpus vms), antakse selle testi eest 0 punkti.


Palume saata kõik küsimused aadressil ttkool@ut.ee
Viimati muudetud: 28.01.1999. a.