Informácie a pravidlá

Σχετικά έγγραφα
Matematika Funkcia viac premenných, Parciálne derivácie

7. FUNKCIE POJEM FUNKCIE

Obvod a obsah štvoruholníka

Ekvačná a kvantifikačná logika

1. Limita, spojitost a diferenciálny počet funkcie jednej premennej

Goniometrické rovnice a nerovnice. Základné goniometrické rovnice

Start. Vstup r. O = 2*π*r S = π*r*r. Vystup O, S. Stop. Start. Vstup P, C V = P*C*1,19. Vystup V. Stop

1. písomná práca z matematiky Skupina A

Matematika prednáška 4 Postupnosti a rady 4.5 Funkcionálne rady - mocninové rady - Taylorov rad, MacLaurinov rad

Motivácia Denícia determinantu Výpo et determinantov Determinant sú inu matíc Vyuºitie determinantov. Determinanty. 14. decembra 2010.

ARMA modely čast 2: moving average modely (MA)

Kompilátory. Cvičenie 6: LLVM. Peter Kostolányi. 21. novembra 2017

Planárne a rovinné grafy

Cvičenie č. 4,5 Limita funkcie

,Zohrievanie vody indukčným varičom bez pokrievky,

Prechod z 2D do 3D. Martin Florek 3. marca 2009

6 Limita funkcie. 6.1 Myšlienka limity, interval bez bodu

3. Striedavé prúdy. Sínusoida

Úvod do lineárnej algebry. Monika Molnárová Prednášky

MIDTERM (A) riešenia a bodovanie

23. Zhodné zobrazenia

Matematika 2. časť: Analytická geometria

24. Základné spôsoby zobrazovania priestoru do roviny

Priamkové plochy. Ak každým bodom plochy Φ prechádza aspoň jedna priamka, ktorá (celá) na nej leží potom plocha Φ je priamková. Santiago Calatrava

Gramatická indukcia a jej využitie

ARMA modely čast 2: moving average modely (MA)

Komplexné čísla, Diskrétna Fourierova transformácia 1

4. Výrokové funkcie (formy), ich definičný obor a obor pravdivosti

Chí kvadrát test dobrej zhody. Metódy riešenia úloh z pravdepodobnosti a štatistiky

Jednotkový koreň (unit root), diferencovanie časového radu, unit root testy

Tomáš Madaras Prvočísla

Moderné vzdelávanie pre vedomostnú spoločnosť Projekt je spolufinancovaný zo zdrojov EÚ M A T E M A T I K A

Rozsah hodnotenia a spôsob výpočtu energetickej účinnosti rozvodu tepla

Úlohy 1. kola letnej časti Termín odoslania riešení tejto série je pondelok 25. jún 2018.

PRIEMER DROTU d = 0,4-6,3 mm

FUNKCIE N REÁLNYCH PREMENNÝCH

7 Derivácia funkcie. 7.1 Motivácia k derivácii

Obsah. 1.1 Reálne čísla a ich základné vlastnosti Komplexné čísla... 8

AerobTec Altis Micro

Matematika 2. časť: Funkcia viac premenných Letný semester 2013/2014

M6: Model Hydraulický systém dvoch zásobníkov kvapaliny s interakciou

Goniometrické substitúcie

1. Dátové štruktúry pre geometrické algoritmy

x x x2 n

Funkcie - základné pojmy

Motivácia pojmu derivácia

Získať nejaké body v tejto úlohe je ľahké: stačí vygenerovať všetky trojice a usporiadať ich podľa súčtu:

Metódy vol nej optimalizácie

Ohraničenosť funkcie

Vzorové riešenia 3. kola zimnej série 2014/2015

6 APLIKÁCIE FUNKCIE DVOCH PREMENNÝCH

1 Prevod miestneho stredného slnečného času LMT 1 na iný miestny stredný slnečný čas LMT 2

TEST Z MATEMATIKY. Prijímacie skúšky na školský rok 2017/2018

KATEDRA DOPRAVNEJ A MANIPULAČNEJ TECHNIKY Strojnícka fakulta, Žilinská Univerzita

UČEBNÉ TEXTY. Pracovný zošit č.2. Moderné vzdelávanie pre vedomostnú spoločnosť Elektrotechnické merania. Ing. Alžbeta Kršňáková

Obyčajné diferenciálne rovnice

7. Dokážte, že z každej nekonečnej množiny môžeme vydeliť spočítateľnú podmnožinu.

Podnikateľ 90 Mobilný telefón Cena 95 % 50 % 25 %

HASLIM112V, HASLIM123V, HASLIM136V HASLIM112Z, HASLIM123Z, HASLIM136Z HASLIM112S, HASLIM123S, HASLIM136S

SLOVENSKÁ KOMISIA CHEMICKEJ OLYMPIÁDY CHEMICKÁ OLYMPIÁDA. 54. ročník, školský rok 2017/2018 Kategória C. Študijné kolo

Deliteľnosť a znaky deliteľnosti

Návrh vzduchotesnosti pre detaily napojení

4. decembra decembra 2003 Teria grafov 1

Michal Forišek: Early beta verzia skrípt z ADŠ

Numerické metódy Učebný text pre bakalárske štúdium

Život vedca krajší od vysnívaného... s prírodou na hladine α R-P-R

Test. Matematika. Forma A. Štátny pedagogický ústav, Bratislava NUPSESO. a.s.

Definícia parciálna derivácia funkcie podľa premennej x. Definícia parciálna derivácia funkcie podľa premennej y. Ak existuje limita.

2. prednáška. Teória množín I. množina operácie nad množinami množinová algebra mohutnosť a enumerácia karteziánsky súčin

MATEMATICKÁ OLYMPIÁDA

Pravdivostná hodnota negácie výroku A je opačná ako pravdivostná hodnota výroku A.

Zložené funkcie a substitúcia

Eulerovské grafy. Príklad Daný graf nie je eulerovský, ale obsahuje eulerovskú cestu (a, ab, b, bc, c, cd, d, da, a, ac, c, ce, e, ed, d, db).

Cieľom cvičenia je zvládnuť riešenie diferenciálnych rovníc pomocou Laplaceovej transformácie,

PROMO AKCIA. Platí do konca roka 2017 APKW 0602-HF APKT PDTR APKT 0602-HF

Margita Vajsáblová. ρ priemetňa, s smer premietania. Súradnicová sústava (O, x, y, z ) (O a, x a, y a, z a )

Kontrolné otázky na kvíz z jednotiek fyzikálnych veličín. Upozornenie: Umiestnenie správnej a nesprávnych odpovedí sa môže v teste meniť.

LR(0) syntaktické analyzátory. doc. RNDr. Ľubomír Dedera

Ján Buša Štefan Schrötter

NUMERICKÁ MATEMATIKA. Moderné vzdelávanie pre vedomostnú spoločnosť/ Projekt je spolufinancovaný zo zdrojov EÚ. Fakulta elektrotechniky a informatiky

Aproximačné algoritmy. (7. októbra 2010) DRAFT

Staromlynská 29, Bratislava tel: , fax: http: // SLUŽBY s. r. o.

KURZ JAZYKA C učebný text pre kvartu a kvintu osemročného gymnázia

ZADANIE 1_ ÚLOHA 3_Všeobecná rovinná silová sústava ZADANIE 1 _ ÚLOHA 3

SK skmo.sk. 66. ročník Matematickej olympiády 2016/2017 Riešenia úloh domáceho kola kategórie B

MATEMATICKÁ ANALÝZA 1

CHÉMIA Ing. Iveta Bruončová

Technická univerzita v Košiciach. Zbierka riešených a neriešených úloh. z matematiky. pre uchádzačov o štúdium na TU v Košiciach

P Y T A G O R I Á D A

Vzorové riešenia 3. kola letnej série 2008/2009

4 Reálna funkcia reálnej premennej a jej vlastnosti

Reálna funkcia reálnej premennej

Algoritmy teórie grafov

KURZ JAZYKA C učebný text pre kvartu a kvintu osemročného gymnázia

18. kapitola. Ako navariť z vody

Odporníky. 1. Príklad1. TESLA TR

Metódy numerickej matematiky I

KATALÓG KRUHOVÉ POTRUBIE

Teória grafov I definícia grafu, základné pojmy, podgraf, cesty a kružnice v grafe, orientované grafy, eulerovský ťah, hamiltonovská kružnica

3. prednáška. Komplexné čísla

Transcript:

Informácie a pravidlá Pre koho je súťaž určená? Do kategórie B sa smú zapojiť len tí žiaci základných a stredných škôl, ktorí ešte ani v tomto, ani v nasledujúcom školskom roku nebudú končiť strednú školu. Do kategórie A sa môžu zapojiť všetci žiaci (základných aj) stredných škôl. Odovzdávanie riešení domáceho kola Riešitelia domáceho kola odovzdávajú riešenia sami, v elektronickej podobe, a to priamo na stránke olympiády:. Odovzdávanie riešení bude spustené niekedy v septembri. Riešenia kategórie A je potrebné odovzdať najneskôr 15. novembra 2016. Riešenia kategórie B je potrebné odovzdať najneskôr 1. decembra 2016. Priebeh súťaže Za každú úlohu domáceho kola sa dá získať od 0 do 10 bodov. Na základe bodov domáceho kola stanoví Slovenská komisia OI (SK OI) pre každú kategóriu bodovú hranicu potrebnú na postup do krajského kola. Očakávame, že táto hranica bude približne rovná tretine maximálneho počtu bodov. V krajskom kole riešitelia riešia štyri teoretické úlohy, ktoré môžu tematicky nadväzovať na úlohy domáceho kola. V kategórii B súťaž týmto kolom končí. V kategórii A je približne najlepších 30 riešiteľov krajského kola (podľa počtu bodov, bez ohľadu na kraj, v ktorom súťažili) pozvaných do celoštátneho kola. V celoštátnom kole účastníci prvý deň riešia teoretické a druhý deň praktické úlohy. Najlepší riešitelia sú vyhlásení za víťazov. Približne desať najlepších riešiteľov následne SK OI pozve na týždňové výberové sústredenie. Podľa jeho výsledkov SK OI vyberie družstvá pre Medzinárodnú olympiádu v informatike (IOI) a Stredoeurópsku olympiádu v informatike (CEOI). Ako majú vyzerať riešenia úloh? V praktických úlohách je vašou úlohou vytvoriť program, ktorý bude riešiť zadanú úlohu. Program musí byť v prvom rade korektný a funkčný, v druhom rade sa snažte aby bol čo najefektívnejší. V kategórii B môžete použiť ľubovoľný programovací jazyk. V kategórii A musíte riešenia praktických úloh písať v jednom z podporovaných jazykov (napr. C++, Pascal alebo Java). Odovzdaný program bude automaticky otestovaný na viacerých vopred pripravených testovacích och. Podľa toho, na koľko z nich dá správnu odpoveď, vám budú pridelené body. Výsledok testovania sa dozviete krátko po odovzdaní. Ak váš program nezíska plný počet bodov, budete ho môcť vylepšiť a odovzdať znova, až do uplynutia termínu na odovzdávanie. Presný popis, ako majú vyzerať riešenia praktických úloh (napr. realizáciu u a u), nájdete na webstránke, kde ich budete odovzdávať. Ak nie je v zadaní povedané ináč, riešenia teoretických úloh musia v prvom rade obsahovať podrobný slovný popis použitého algoritmu, zdôvodnenie jeho správnosti a diskusiu o efektivite zvoleného riešenia (t. j. posúdenie časových a pamäťových nárokov programu). Na záver riešenia uveďte program. Ak používate v programe netriviálne algoritmy alebo dátové štruktúry (napr. rôzne súčasti STL v C++), súčasťou popisu algoritmu musí byť dostatočný popis ich implementácie. Usporiadateľ súťaže Olympiádu v informatike (OI) vyhlasuje Ministerstvo školstva SR v spolupráci so Slovenskou informatickou spoločnosťou (odborným garantom súťaže) a Slovenskou komisiou Olympiády v informatike. Súťaž organizuje Slovenská komisia OI a v jednotlivých krajoch ju riadia krajské komisie OI. Na jednotlivých školách ju zaisťujú učitelia informatiky. Celoštátne kolo OI, tlač materiálov a ich distribúciu po organizačnej stránke zabezpečuje IUVENTA v tesnej súčinnosti so Slovenskou komisiou OI. strana 1 z 6 úloha A-I-1

A-I-1 Bežecké preteky Toto je praktická úloha. Pomocou webového rozhrania odovzdajte funkčný, odladený program. Olympijské hry v Riu boli plné úžasných športových výkonov v tých najrozličnejších disciplínach. Samkovi sa však najviac zapáčil šprint na 100 metrov. Páčil sa mu až tak, že ho neprestal sledovať ani po skončení olympiády a dokonca naň začal aj stávkovať. Samko však vie, že hazard je nebezpečný a naviac, on sám má viac smoly ako šťastia. Stávkuje preto zásadne na istotu. Napríklad je v poriadku staviť na to, že Usain Bolt porazí Justina Gatlina, pretože ho predbehol v oboch posledných šprintoch, ktoré spolu bežali. Staviť ale na to, že Gatlin predbehne Yohana Blaka je nebezpečné. Gatlin ho síce porazil v poslednom spoločnom súboji, v behu pred tým však dominoval Blake. Samka by teraz zaujímalo, koľko stávok na istotu vie spraviť, aby si vedel vypočítať, koľko na tom zarobí. Súťažná úloha Máme k dispozícii výsledky posledných dvoch šprintov. Každého šprintu sa zúčastnilo tých istých n bežcov. Zistite, koľko existuje takých dvojíc bežcov (a, b), že v oboch šprintoch skončil súťažiaci a pred súťažiacim b. Formát u V prvom riadku u sa nachádza kladné celé číslo n počet bežcov, ktorý sa zúčastňujú súťaže. Bežcov si očíslujeme od 1 po n. Druhý a tretí riadok obsahujú výsledky posledných dvoch šprintov týchto súťažiacich. Každý z týchto riadkov obsahuje n čísel poradie, v ktorom títo súťažiaci dobehli do cieľa. (Teda na začiatku riadku je víťaz šprintu, za ním ten kto dobehol druhý, a tak ďalej.) V každom z týchto riadkov je teda nejaká permutácia čísel 1 až n. Formát u Vypíšte jediné číslo počet dvojíc (a, b) takých, že šprintér a skončil v oboch behoch pred šprintérom b. Dajte si pozor, lebo výsledok sa nemusí zmestiť do 32-bitovej celočíselnej premennej. Použite preto premennú s dostatočným rozsahom napr. long long v C++ alebo int64 v Pascale. Obmedzenia a hodnotenie Je 10 sád testovacích ov, za každú môžete získať 1 bod. Vo všetkých sadách platí n 100 000. V prvých 6 sadách naviac platí, že n 5 000. V prvých 3 sadách dokonca platí, že n 100. Časový limit je 0.5 sekundy. Pamäťový limit je 1 GB. Príklady 5 1 2 3 4 5 1 2 3 4 5 Ľubovoľná dvojica, v ktorej je a < b, je správna. Takýchto dvojíc je práve 10. 5 2 5 4 3 1 5 1 2 3 4 10 5 Podmienky zo zadania spĺňajú dvojice (2, 3), (2, 4), (5, 1), (5, 3) a (5, 4). Žiadna iná dvojica túto podmienku nespĺňa. 7 1 2 3 4 5 6 7 7 6 5 4 3 2 1 0 strana 2 z 6 úloha A-I-1

A-I-2 Rekonštrukcia školy Toto je praktická úloha. Pomocou webového rozhrania odovzdajte funkčný, odladený program. Opäť prišiel september a s ním aj školský rok. Pán učiteľ sa práve chystá ísť z kabinetu na svoju prvú hodinu. V budove školy sa však ešte dokončujú letné rekonštrukcie, a tak sa po chodbách povaľuje kopa harabúrd. No a náš pán učiteľ nie je práve najštíhlejší, takže sa mu nedarí dostať sa pomedzi všetky prekážky do triedy, kde má učiť. Možno keby šikovne kopol tuto do tej kopy starých vysvedčení, to by mu mohlo uvoľniť cestu... Súťažná úloha Pôdorys školy je obdĺžnik. Rozdelíme si ho na mriežku tvorenú r s rovnako veľkými štvorcovými políčkami. Každé políčko je buď voľné, alebo je na ňom prekážka. Pán učiteľ v ľubovoľnom okamihu zaberá nejaký štvorec rozmerov 2 2. Učiteľ sa pohybuje v krokoch. V každom kroku sa posunie o jedno políčko (teda o polovicu svojej veľkosti) v jednom zo štyroch základných smerov. Vašou úlohou je napísať program, ktorý načíta popis školy a nájde cestu medzi kabinetom (danou štvoricou voľných políčok) a triedou (inou danou štvoricou voľných políčok). Počas cesty sa pán učiteľ smie, až na nanajvýš jednu výnimku, pohybovať len po voľných políčkach. Presnejšie, trasa, po ktorej prejde pán učiteľ, smie obsahovať nanajvýš jedno políčko 1 1 na ktorom je prekážka. Všetky ostatné políčka, cez ktoré učiteľ prechádzal, musia byť voľné. (Na to jediné políčko s prekážkou smie učiteľ počas svojej cesty stúpiť ľubovoľne veľakrát, dokonca z neho môže odísť a neskôr sa naň zase vrátiť, ak chce.) Formát u Prvý riadok u obsahuje dve medzerou oddelené celé čísla r a s: počet riadkov a počet stĺpcov v mriežke. Platí 2 r 2000 a 2 s 2000. (Ako uvidíme nižšie, najmenší platný má dokonca rozmery až 2 4.) Nasleduje mapa školy: r riadkov a v každom z nich s znakov. Bodky označujú voľné políčka, mriežky sú prekážky, písmená K a T označujú kabinet (kde učiteľ začína) a triedu (kam sa chce dostať). Môžete predpokladať, že na celej mape sú práve štyri K a štyri T. Aj K aj T budú vždy tvoriť štvorec rozmerov 2 2. Formát u Vypíšte jediný riadok. Ak neexistuje žiadna vyhovujúca cesta, vypíšte text neexistuje. V opačnom prípade vypíšte popis ľubovoľnej vyhovujúcej cesty: reťazec písmen N, E, S, W. Tieto predstavujú krok na sever, východ, juh a západ. (Krok na sever dostane učiteľa na mape o riadok vyššie, krok na východ o stĺpec doprava.) Vypísaná cesta nemusí byť najkratšia možná, jej dĺžka však nesmie prekročiť hodnotu r s. Obmedzenia a hodnotenie Riešenie, ktoré efektivne vyrieši všetky y, získa 10 bodov. Až 7 bodov viete získať za y kde (r s) 10 000, z toho 3 body sú za y kde (r s) 30. Časový limit je 5 sekúnd. Pamäťový limit je 1 GB. Príklady 3 7 KK.#.TT KK.#.TT...#... 4 7 KK.#.TT KK.##TT #......#... neexistuje Nech by učiteľ išiel akokoľvek, jeho trasa by určite obsahovala aspoň dve prekážky. ESSEEEENN Iným správnym riešením pre tento je reťazec ESSEEEENSNN. strana 3 z 6 úloha A-I-2

A-I-3 Moderné umenie Táto úloha je teoretická. Pomocou webového rozhrania odovzdajte súbor vo formáte PDF, obsahujúci riešenie, spĺňajúce požiadavky uvedené v pravidlách. V Kultúrnom Stredisku Postmoderny otvárajú novú výstavu obrazov maliara Mária. Jeho obrazy sú vrcholom abstraktného umenia: každý obraz je len zmes farebných bodiek na obrovskom bielom plátne. Zamestnanci strediska netušili, kde má ktorý obraz hore, a tak ich všetky zavesili rovnobežne so súradnicovými osami. Mário im však neskôr vysvetlil, že každý jeho obraz má jednu špeciálnu bodku, ktorá sa pri správnom zavesení nachádza na obraze napravo od všetkých zvyšných bodiek. Mário preto žiada pracovníkov KSP, aby obrazy pootáčali do správnych polôh. A oni žiadajú vás, aby ste im povedali, o koľko stupňov majú ktorý obraz otočiť. Súťažná úloha Plátno obrazu je štvorec, ktorého ľavý dolný roh sa nachádza na pozícii ( 10 000, 10 000) a pravý horný roh na pozícii (10 000, 10 000). Otáčať ho môžete iba okolo jeho stredu, teda okolo pozície (0, 0). Na e dostanete pozície jednotlivých farebných bodiek, pričom jedna z týchto bodiek je špeciálna. Vašou úlohou je nájsť také reálne číslo ϕ, že keď otočíme obraz okolo stredu o ϕ stupňov v smere hodinových ručičiek, tak bude mať špeciálna bodka ostro väčšiu x-ovú súradnicu ako hociktorá iná bodka. Môžete predpokladať, že bodky sú navzájom rôzne a že žiadne tri bodky neležia na priamke. Naviac môžete pri písaní svojho programu predpokladať, že práca s reálnymi číslami je presná teda nemusíte riešiť zaokrúhľovanie. Formát u a u V prvom riadku u je číslo n 3, udávajúce počet bodiek na obraze. Nasleduje n riadkov, každý obsahuje dve reálne čísla x i a y i ( 10 000 x i, y i 10 000) súradnice jednej bodky. Špeciálna bodka je na e uvedená ako prvá (t.j., jej súradnice sú v druhom riadku u, hneď pod číslom n). Na vypíšte reálne číslo ϕ spĺňajúce podmienku zo zadania. Ak existuje viac riešení, vypíšte ľubovoľné z nich. Ak žiadne také číslo neexistuje, vypíšte neexistuje. Hodnotenie Za riešenie efektívne fungujúce pre n 100 môžete získať až 5 body. Za riešenie efektívne fungujúce pre n 1 000 môžete získať až 7 bodov. Vzorové, 10-bodové riešenie by na bežnom počítači do sekundy vyriešilo ľubovoľný s n 100 000. Dôležitou súčasťou ľubovoľného efektívneho riešenia je dôkaz jeho správnosti. Príklady 4 0 1 1 0-1 0 0-1 4 0 0 0 1-1 -1 1-1 90.000000000 Špeciálny bod sa nachádza na pozícii (0, 1). Ak celý obraz otočíme doprava o 90 stupňov, špeciálny bod skončí na súradniciach (1, 0), zatiaľ čo ostatné body sa presunú na (0, 1), (0, 1) a ( 1, 0). Špeciálny bod má zjavne zo všetkých bodov najväčšiu x-ovú súradnicu. Iným správnym riešením by bolo napríklad číslo 87.75. Neexistuje Nech obraz otočíme akokoľvek, špeciálny bod ostane stále na pozícii (0, 0), lenže pri ľubovoľnom otočení bude niektorý zo zvyšných bodov viac napravo. strana 4 z 6 úloha A-I-3

A-I-4 Stromochod Toto je teoretická úloha. Pomocou webového rozhrania odovzdajte súbor vo formáte PDF, obsahujúci riešenie, spĺňajúce požiadavky uvedené v pravidlách. K tejto úlohe patrí študijný text uvedený na nasledujúcich stranách. Odporúčame najskôr prečítať ten a až potom sa vrátiť k samotným súťažným úlohám. Jednotlivé podúlohy súťažnej úlohy spolu nesúvisia, môžete ich riešiť v ľubovoľnom poradí. V každej podúlohe napíšte program pre stromochod tak, aby platilo: Keď ho spustíme na ľubovoľnom binárnom strome, tak v jeho koreni nastaví značku ok práve vtedy, ak ten strom spĺňa podmienku zadanú v príslušnej podúlohe. Súťažná úloha, podúloha A (2 body) Značku ok nastavte práve vtedy, ak je počet vrcholov v strome párny. Súťažná úloha, podúloha B (4 body) Značku ok nastavte práve vtedy, ak je počet vrcholov v strome mocninou dvojky (1, 2, 4, 8,... ). Súťažná úloha, podúloha C (4 body) Značku ok nastavte práve vtedy, ak je dotyčný strom úplný. Strom je úplný, ak platia nasledovné podmienky: Všetky listy ležia rovnako hlboko. (T.j. do každého listu vedie z koreňa rovnako dlhá cesta.) Každý vrchol, ktorý nie je list, má oboch synov aj ľavého, aj pravého. Študijný text: stromochod V tomto ročníku OI budeme programovať stromochod zariadenie určené na výpočty na binárnych stromoch. Študijný text začneme definíciou toho, čo presne sú binárne stromy. Graf sa skladá z konečnej množiny vrcholov a konečnej množiny hrán. Každá hrana spája dva vrcholy. Každé dva vrcholy sú spojené nanajvýš jednou hranou. Cesta je postupnosť navzájom rôznych vrcholov, v ktorej sú každé dva po sebe idúce vrcholy spojené hranou. Strom je graf, v ktorom medzi každými dvoma vrcholmi vedie práve jedna cesta. Strom môžeme zakoreniť jeden z jeho vrcholov prehlásiť za koreň. Pre každé dva vrcholy spojené hranou následne hovoríme, že ten z nich, čo je bližšie ku koreňu, je otec a ten druhý je jeho syn. Koreň je jediný vrchol, ktorý nemá otca. Vrcholy, ktoré nemajú žiadnych synov, nazývame listy stromu. Podstrom je časť stromu, ktorá je vytvorená daným vrcholom, jeho synmi, synmi jeho synov, a tak ďalej až k listom. Binárny strom je špeciálny zakorenený strom. Každý vrchol v binárnom strome má najviac dvoch synov. Navyše (oproti všeobecnému binárnemu stromu) rozlišujeme ľavých a pravých synov každý vrchol má teda nanajvýš jedného ľavého a nanajvýš jedného pravého syna. (Aj ak má vrchol len jedného syna, rozlišujeme, či je ľavý alebo pravý.) Na obrázku vpravo vidíte niekoľko rôznych binárnych stromov. Stromy kreslíme tak, aby koreň bol úplne na vrchu obrázku. Na každom obrázku je koreň vyplnený sivou a všetky listy sú vyplnené čiernou farbou. Stromochod slúži na riešenie problémov týkajúcich sa binárnych stromov. Môžeme si ho predstaviť ako počítač, ktorý sa pohybuje po strome. V každom okamihu výpočtu se nachádza v práve jednom z vrcholov stromu. Pamäť stromochodu je ohraničená: môže si pamätať len konečné množstvo bitov informácie, teda v každom okamihu sa môže nachádzať len v jednom z konečného počtu stavov. Okrem toho stromochod smie zaznamenávať informácie len do navštívených vrcholov. Do každého vrchola sa taktiež zmestí len konečné množstvo informácie a tieto informácie môže stromochod čítať a zapisovať vždy len v tom vrchole, v ktorom sa práve nachádza. Údaje uložené vo vrchole budeme nazývať značky. Stromochod môžeme programovať v ľubovoľnom bežnom programovacom jazyku. Kvôli ohraničeniu na konečný počet stavov môžeme používať len celočíselné premenné s vopred daným rozsahom (napríklad 0..9) a booleovské strana 5 z 6 úloha A-I-4

premenné pre pravdivostné hodnoty. To napríklad znamená, že nie je možné používat polia ani smerníky. Z príkazov sú k dispozícii podmienky, cykly a goto. Procedúry a funkcie je možné používať, ale na ich parametre sa vzťahujú rovnaké ohraničenia na typy a navyše je zakázaná rekurzia. Pozor, použité rozsahy premenných nesmú závisieť od veľkosti stromu. K aktuálnemu vrcholu (teda k tomu, v ktorom sa práve nachádza) vie stromochod pristupovať pomocou špeciálnej premennej V. Tá sa správa ako záznam (napr. record v Pascale, struct v C) ktorý obsahuje značky uložené v aktuálnom vrchole. Množinu značiek si môžete určiť vy pri písaní programu, ale musí ich byť konštantný počet a opäť platí ohraničenie na povolené typy. Ak chceme stromochod presunúť na ľavého syna, pravého syna, resp. otca aktuálneho vrcholu, zavoláme funkciu krok_l, krok_p, resp. krok_o. Táto funkcia nemá žiadne parametre ani návratovú hodnotu. Ak sa pokúsite presunúť do neexistujúceho vrcholu, program sa zastaví s chybou. Preto sa hodí vopred otestovať, či syn alebo otec aktuálneho vrcholu existuje. Na to slúžia funkcie ex_l, ex_p a ex_o. Tieto pomocné funkcie nemajú žiadne parametre a vracajú booleovskú hodnotu. Výpočet stromochodu prebieha následovne. Na e dostaneme nejaký strom. Stromochod umiestnime do jeho koreňa a všetky značky v celom strome vynulujeme (teda číselné premenné nastavíme na nulu a boolovské na false). Výnimkou môžu byť značky, o ktorých je výslovne povedané, že sú súčasťou u. Potom sa rozbehne program. Počas behu programu sa stromochod prechádza po strome, mení svoj stav (svoje lokálne premenné) a údaje zapísané vo vrcholoch stromu (značky). Keď beh programu korektne skončí, jeho si prečítame z určených značiek. Za čas behu programu na konkrétnom strome budeme považovať počet presunov po ňom. Časová zložitosť programu je funkcia, ktorá pre n vráti maximálny čas behu dotyčného programu na n-vrcholovom strome. Pamäťovú zložitosť neposudzujeme, pretože všetky programy si pamätajú lineárne množstvo informácie. Príklad Ukážeme si, ako stromochod naprogramovať tak, aby navštívil všetky vrcholy stromu a do každého umiestnil značku. Strom budeme prechádzať do hĺbky: začneme v koreni, odtiaľ prejdeme do ľavého podstromu. Keď sa z neho vrátime, presunieme sa do pravého podstromu, a nakoniec sa vrátime z celého podstromu von. (Na obrázku stromu takýto prechod zodpovedá prechádzaniu vrcholmi proti smeru hodinových ručičiek.) Pretože nemáme k dispozíci rekurziu, budeme si v každom vrchole pamätať značku s menom stav, ktorá bude vyjadrovať, koľkokrát sme už vo vrchole boli. Ak navštívime vrchol prvýkrát, prejdeme na ľavého syna; druhýkrát prejdeme na pravého a po treťom príchode do vrcholu sa už vrátime na jeho otca. Ak ľavý alebo pravý syn neexistujú, budeme se chovať tak, ako by sme sa z nich vrátili okamžite. Program môže vyzerať takto: var zbytocna: 0..47; { ukazka lokalnej premennej stromochodu } type vrchol = record { typ vrchol popisuje, ake znacky ukladame do vrcholov } bol_som_tu: boolean; { tuto znacku chceme nastavit na true vo vsetkych vrcholoch } stav: 0..3; { pocitadlo kolkokrat sme uz tento vrchol navstivili } end { na zaciatku je v kazdom vrchole bol_som_tu = false a stav = 0 }; begin zbytocna := 0; while zbytocna < 7 do begin { nekonecny cyklus } V.bol_som_tu := true; V.stav := V.stav + 1; case V.stav of 1: if ex_l then krok_l; 2: if ex_p then krok_p; 3: if not ex_o then halt else krok_o; end; end; end. Časová zložitosť tohoto programu je lineárna od počtu vrcholov, pretože každý vrchol navštívime najviac trikrát. TRIDSIATY DRUHÝ ROČNÍK OLYMPIÁDY V INFORMATIKE Príprava úloh: Michal Anderle, Michal Forišek Recenzia: Michal Forišek Slovenská komisia Olympiády v informatike Vydal: IUVENTA Slovenský inštitút mládeže, Bratislava 2016 strana 6 z 6 úloha A-I-4