ProFIIT 2005 pre korešpondenčné kolo súťaže Úvod Predstavte si, že...... pred pár minútami vyštartovala do vesmíru ultramoderná raketa First Intelligent Interplanetary Turborocket s cieľom postaviť základ vesmírneho mestečka na Zemi najbližšej a najperspektívnejšej planéte Mars. Vždy ste túžili dostať sa na takúto misiu, no bohužiaľ sa vám to nepodarilo. Nevybrali vás kvôli nejakej, podľa vás, úplnej hlúposti. Teraz stojíte v riadiacom centre s tenkými slúchadlami na ušiach a na obrovskej obrazovke s napätím sledujete oblohu, kde mizne dym, ktorý za sebou nechala turboraketa... Najprv ste sa riadne hnevali a chceli ste z celého programu odísť, ale nakoniec vás prešla zlosť a uvedomili ste si, že vás čaká zaujímavá misia tu, v riadiacom stredisku. Koniec koncov, je to predsa len bezpečnejšie, pohodlnejšie a aj príjemnejšie uvedomujete si, keď vám ponúknu šampanské na oslavu úspešného štartu. So šťavnatým sendvičom v ruke si škodoradostne spomeniete na konzervy a tuby akoby od zubnej pasty, ktoré obsahujú stravu pre kozmonautov. No ani v riadiacom stredisku to nie je jednoduché. Počas letu bude vašou úlohou tu na Zemi riešiť problémy kozmonautov, popasovať sa s úlohami, ktoré súvisia s poslaním ďalšej rakety so zásobami a dokonca aj súťažiť s chvastúňom, ktorý vo vzácnych chvíľach kľudu nedá pokoj s rôznymi zábavkami. Držíme vám palce nech to všetko úspešne zdoláte. Upozornenie: Pre všetky problémy platí takéto pravidlo: posledný riadok výstupu má byť odriadkovaný presne tak ako všetky ostatné riadky výstupu (na konci každého riadku je ENTER). 1
Časové intervaly Prvou úlohou, ktorú ste dostali vyriešiť 1, je úloha pracovne nazvaná intervaly. Na túto úlohu sa akosi pozabudlo. Tušíte, že to, že úloha nebola vyriešená ešte pred štartom, súvisí so snahou za každú cenu dodržať plánovaný štart turborakety. V každom prípade ju treba vyriešiť teraz. Počas letu sa musia jednotliví členovia posádky striedať pri viacerých činnostiach (kontrola prístrojov, komunikovanie s riadiacim centrom, venovanie sa jednoduchým pokusom v stave beztiaže a podobne). Všetci kozmonauti sú vycvičení vo všetkých týchto činnostiach. Striedanie bolo zavedené na radu psychológov, ktorí upozorňovali, že pre malú skupinu ľudí uzatvorených v malom priestore je prospešné, aby sa v jednotlivých úlohách striedali. Druhým argumentom pre striedanie kozmonautov vo svojich činnostiach bola snaha, aby v prípade úrazu alebo nevoľnosti niektorého z členov posádky, boli ostatní kozmonauti vo všetkých činnostiach natoľko skúsení, aby sa vedeli navzájom plnohodnotne zastúpiť. Je preto potrebné urýchlene vytvoriť harmonogram prác pre kozmonautov. Na to je najprv nutné nájsť vhodný časový interval predstavujúci dobu, počas ktorej sa má jeden kozmonaut venovať jednej činnosti. Po uplynutí tejto doby si kozmonauti vymenia svoje úlohy. Na stanovenie dĺžky toho najvhodnejšieho intervalu však vplýva aj počet, koľko krát sa bude počas letu tento interval opakovať. Aby mohol byť za pomoci psychológov určený interval správne, vašou úlohou je zistiť, koľko krát sa nimi navrhnutý interval zmestí medzi dva dátumy určujúce štart a predpokladaný cieľ letu. Najprv ste to chceli zrátať ručne, len s pomocou kalendára, ale keď ste zistili, že podobne chcú rozdeľovať čas aj počas stavby základu vesmírneho mestečka a aj počas cesty domov, rozhodli ste sa urobiť na to program. Vstup Vstup bude v prvom riadku obsahovať jedno celé číslo u (1 u 1000) vyjadrujúce počet zadaných úloh. Potom bude nasledovať popis u úloh. Každá úloha bude definovaná blokom troch riadkov. V prvom z trojice riadkov v bloku bude zadaný dátum a čas štartu pomocou šiestich celých čísel r m d h m s oddelených vždy jednou medzerou vo formáte rok mesiac deň hodina minúta sekunda, pričom platí 1970 r 2030, 1 m 12, 1 d 31, 0 h 23, 0 m 59, 0 s 59. Druhý riadok v bloku predstavuje dátum a čas predpokladaného cieľa v takom istom formáte ako dátum a čas pre štart. Tretí riadok obsahuje jedno celé číslo i vyjadrujúce dĺžku hľadaného intervalu (1 i 1000) a jeden znak vyjadrujúci v akých jednotkách je zadaná dĺžka intervalu. Znak s vyjadruje sekundy, znak m vyjadruje minúty, znak h určuje hodiny a znak d predstavuje dni. Číslo i a znak sú na vstupe oddelené jednou medzerou. Výstup Pre každý blok na vstupe je výstupom jedno celé číslo v samostatnom riadku. Toto číslo má vyjadrovať koľko krát sa uvedený časový interval zmestí medzi zadané časové okamihy. 1 To neznamená, že ju musíte vyriešiť ako prvú. 2
Ukážkový vstup 2 1997 12 31 23 59 59 1998 1 1 0 0 0 1 s 2000 2 29 0 0 0 2000 2 29 23 59 59 1 d Ukážkový výstup 1 0 3
Zásobovanie vodou Vaša druhá úloha sa týka nákladu cisterien s vodou, ktoré sa budú posielať druhou turboraketou so zásobami. Táto úloha je pracovne pomenovaná cisterny. Žiadna cisterna nemôže byť naplnená príliš veľkým množstvom vody, pretože pri vysokých teplotách by ju mohlo veľa stlačenej vody roztrhnúť. Fyzici vypočítali maximálne bezpečné objemy vody pre jednotlivé objemy cisterien, ktoré sú k dispozícii. Pre každú cisternu bol ďalej určený minimálny objem tak, aby bola cisterna využitá. Experti naplánovali objem vody (za normálnych podmienok), ktorá sa má do vesmírneho mestečka poslať. Tiež určili jednotlivé typy cisterien, ktoré sú k dispozícii. Vašou úlohou je napísať program, ktorý pre daný objem vody a dané typy cisterien určí, koľko vody (v litroch) zostane, teda sa nepodarí do cisterien naplniť tak, aby boli cisterny využité, a aby boli dodržané bezpečnostné obmedzenia. Predpokladajte, že voda je dôležitá, a tak sa pre ňu musí v rakete nájsť miesto. Uvažujte teda, že máte k dispozícii neobmedzený počet cisterien zadaných druhov. Vstup Vstup začína riadkom obsahujúcim celé kladné číslo u (1 u 1000) vyjadrujúce počet samostatných zadaní. Prvý riadok zadania obsahuje dve celé čísla v a f oddelené medzerou. Číslo v predstavuje objem vody v tisíckach litrov, ktorý chceme naplniť (0 v 1 000 000) a f vyjadruje počet druhov cisterien (1 f 100). Ďalej je pre každý druh cisterny na samostatnom riadku uvedená jej minimálna a maximálna kapacita v litroch (dve celé čísla oddelené medzerou). Maximálna kapacita cisterny nie je menšia ako 325 l a nepresiahne 4500 l. Minimálna kapacita cisterny nie je menšia ako 95% a nepresiahne 99% maximálnej kapacity danej cisterny (napr. cisterna s maximom 534 l môže mať minimum v rozmedzí 95% z 534 l a 99% z 534 l). Môžete predpokladať, že je k dispozícii neobmedzený počet každého druhu cisterny. Výstup Pre každé zadanie treba v samostatnom riadku vypísať celé číslo vyjadrujúce počet litrov vody, ktoré nie je možné naplniť. Ukážkový vstup 2 10 2 4450 4500 725 750 10000 2 4450 4500 725 750 4
Ukážkový výstup 250 0 5
Domino Práve, keď ste si vydýchli, pretože nemusíte aktuálne riešiť žiadnu pracovnú úlohu, kolega sediaci vedľa do vás začne dobiedzať. Je to veľmi namyslený chlapík, ktorého ste medzičasom pre seba začali volať Fiškus. Teraz po vás chce, aby ste s ním súťažili. Pred sebou má rozložené kocky domina a v rukách stopky. Poznáš domino efekt? Stavím sa, že lepšie odhadnem čas, za ktorý do radu postavané dominá spadnú. Nemáte chuť na takúto zábavku, ale kolega do vás stále zabŕda, tak si poviete, že ho dostanete. Spomeniete si na krátky spot v televízii, kde ukazovali veľké haly plné naukladaných farebných domín, ktoré po zhodení prvého domina postupne padali a zhadzovali tak ďalšie, pričom odkrývali zaujímavé obrazce. Tam bolo naozaj dôležité načasovanie a odhadovanie, kedy ktoré domino spadne. Na to, aby ste s Fiškusom hrali jeho hru, vydobyjete si takéto podmienky: pred súťažou vám dodá popis, ako sú dominá postavené a dá vám trochu času na premyslenie. Fiškus so sebavedomým úškrnom pridáva pravidlá, ako bude popisovať dominá. Systém domín bude obsahovať niekoľko významných domín. Tie sú navzájom pospájané radom jednoduchých domín. Keď spadne významné domino, všetky rady, ktoré sú s ním spojené, tiež začnú padať (okrem tých, ktoré už spadli). Keď spadnutý rad jednoduchých domín dosiahne významné dominá, ktoré ešte nie sú spadnuté, tak tieto významné dominá tiež spadnú a začnú spôsobovať padanie rád domín, ktoré sú s týmito významnými dominami spojené. Môže sa stať, že rady domín začnú padať na oboch koncoch, čo spôsobí, že posledne spadnuté domino v tom rade bude niekde medzi významnými dominami, ktoré sú na koncoch radu. Predpokladajte, že rad domín padá rovnomernou rýchlosťou. Vašou úlohou je vytvoriť program, ktorý pre dané rozloženie domín určí čas, kedy spadne posledné domino. Vstup Prvý riadok obsahuje počet blokov u (1 u +1000), ktoré vyjadruje počet úloh. Prvý riadok každého bloku obsahuje dve čísla: počet významných domín n (1<n<500) a počet radov domín m medzi nimi. Významné dominá sú číslované od 1 po n. Medzi každým párom významných domín je najviac jeden rad domín. Predpokladajte, že po zhodení významného domina č. 1 postupne spadnú všetky ostatné dominá (žiadne nezostane stáť). Nasledujúcich m riadkov obsahuje tri čísla a, b a d oddelené medzerou. Tieto čísla vyjadrujú, že medzi významnými dominami a a b je rad domín, ktorý celý spadne za d sekúnd, ak je zhodený z jedného konca (je jedno, z ktorého). Číslo d je celé číslo a nadobúda hodnotu najviac 50. Dominový efekt vždy odštartuje zhodenie významného domina č. 1. Výstup Pre každý blok treba v samostatnom riadku vypísať čas, za ktorý spadne posledné domino, zaokrúhlený obvyklým spôsobom na jedno desatinné miesto, v tvare: Posledne domino spadne po c sekundach. Desatinné miesto je oddelené desatinnou bodkou. 6
Ukážkový vstup 2 2 1 1 2 27 3 3 1 2 5 1 3 5 2 3 5 Ukážkový výstup Posledne domino spadne po 27.0 sekundach. Posledne domino spadne po 7.5 sekundach. 7
Bláznivé správy V riadiacom stredisku nastal veľký rozruch. Zrazu začali z turborakety prichádzať čudné správy. Na prvý pohľad vyzerali akoby zakódované a nikto im nerozumel. Všetci od toho dali ruky preč, a keďže ste práve neriešili žiadnu úlohu, dostali ste za úlohu vyriešiť túto záhadu vy. Fiškus vám chvíľu pozeral cez rameno, potom sa zhnusene obrátil a odišiel k svojmu dominu. Vy ste si však hneď všimli, že písmenká z ľavej strany klávesnice vôbec nie sú v správach obsiahnuté. Naopak, vyskytujú sa tam hojne znaky z pravej časti klávesnice, ako napr. [. Chvíľu ste sa s textom hrali, a potom ste zistili, že správy sú zakódované jednoduchým spôsobom: namiesto správnej klávesy autor správy vždy stlačil klávesu posunutú o 2 doprava. Tak namiesto a správa obsahovala d a namiesto d tam bolo napísané g. Vašou úlohou je napísať program, ktorý dekóduje takto zakódovaný text. Predpokladajte, že zakódovaná správa (výstup z vášho programu) obsahuje len písmená anglickej abecedy a medzeru. Medzera sa vždy zakóduje aj dekóduje do medzery. K dispozícii máte aj obrázok klávesnice, aké majú kozmonauti so sebou. Vstup Vstup bude obsahovať v prvom riadku jedno celé číslo u (1 u 1000) určujúce počet správ. Potom bude obsahovať u správ, každá v samostatnom riadku. Správa môže obsahovať malé písmená anglickej abecedy (okrem písmen: q, w, a, s, z, x), medzeru a znaky [ ] ;,. Predpokladajte, že každá správa bude obsahovať aspoň 1 znak a najviac 1000 znakov. Výstup Výstup bude obsahovať u riadkov, teda u dekódovaných správ. 8
Ukážkový vstup 1 cgydnp.t ypdgpdbt fuytgpf;[ Ukážkový výstup zdravime riadiace stredisko 9
Zábavka kozmonautov Po chvíli voľna sa na vás obrátil váš šéf s naliehavou prosbou: Medzi turbokozmonautmi to iskrí. Vyzerá to na ponorkovú chorobu. Vieš, kvôli čomu sa hádajú? Predstav si, že sa hádajú kvôli kockám. Hádžu si kocky! Najprv si ich hádzali len tak, aké to bude v stave beztiaže, ale potom do toho zatiahli matematiku... Po krátkej odmlke sa obzrie okolo seba, žmurkne na vás a dodá: Je to delikátne. Poďte so mnou. Odvedie vás k obrazovke, mikrofónu a slúchadlám, kde máte priame spojenie s kozmonautmi. Tí vám začnú vysvetľovať ich problém: Pozri, mám tu rôzne kocky. Sú od môjho syna pre šťastie, hovorí kapitán posádky a v zápätí ďalší kozmonaut pokračuje: Pôvodne som poznal len také, aké sa používajú v Človeče nehnevaj sa, ale ako kocky sa dajú použiť aj iné pravidelné telesá. Kapitán sa opäť pretlačí dopredu a znovu vám ukáže kocky, aké sú na obrázku. Predstav si, že očíslujeme na každom pravidelnom p- stennom telese steny od 1 do p. Keď potom hodíme kockou p-stenným telesom, každá stena môže byť na vrchu kocky s rovnakou pravdepodobnosťou. Napríklad, klasická kocka so 6 stenami má hodnoty 1, 2, 3, 4, 5 a 6 a každá bude na vrchu kocky s pravdepodobnosťou 1/6. Situácia sa však komplikuje, keď sa kockou hádže viackrát. Napríklad, keď hodíš kockou dvakrát, suma, ktorú dostaneš, keď spočítaš čísla na vrchu kocky v oboch hodoch môže byť od 2 do 12. Ale ich pravdepodobnosti nie sú 1/12! Pravdepodobnosť, že suma bude 2 je 1/36 a pravdepodobnosť, že suma bude 3 je 2/36, uzavrie smutne. Nevieme sa dohodnúť na pravdepodobnostiach, keď hádžeme kockami veľakrát. Každý hovoríme niečo iné... kapitán dodá trochu bojovne: Vôbec tomu nerozumejú, musíš im vysvetliť ako to je... Že mám pravdu... Vašou úlohou je teda rozsúdiť ich. Vytvorte preto program, ktorý pre typ kocky daný počtom jej stien, počet hodov tejto kocky a sumu určí pravdepodobnosť, že suma čísel z vrchu kocky v danom počte hodov bude daná suma. Úloha predpokladá, že pre ľubovoľné p je možné vyrobiť pravidelný p-sten. Vstup Prvý riadok obsahuje počet blokov určujúcich počet jednotlivých úloh u (1 u 1000 ). Každá úloha je určená jedným riadkom, ktorý obsahuje 3 čísla p, h a s oddelené vždy jednou medzerou. Prvé číslo p vyjadruje počet stien kocky (1 p 50). Číslo h vyjadruje počet hodov kocky a platí 1 h 50. Posledné číslo s je zadaná suma, pre ktorú treba vypočítať pravdepodobnosť. Pre s platí 1 s 4000. 10
Výstup Pre každý riadok vstupu vypíše program jeden riadok výstupu. Ten bude vo forme a/b, pričom b = p h a a/b vyjadruje hľadanú pravdepodobnosť. Všimnite si, že sa nepožaduje desatinné číslo, ale zlomok vyjadrujúci pravdepodobnosť. Ukážkový vstup 2 6 1 5 7 3 15 Ukážkový výstup 1/6 28/343 11
Hasiace prístroje Ďalší problém, ktorý je vám oficiálne pridelený, je registrovaný pod názvom hasiace prístroje. Tento krát je treba vyriešiť, koľko hasiacich prístrojov sa má naložiť do druhej turborakety. Tieto hasiace prístroje je potrebné nainštalovať do budov vesmírneho mestečka na Marse. Všetky budovy mestečka budú prepojené tunelmi. To preto, aby nebolo potrebné si pri prechodoch medzi budovami obliekať skafander. Budovy budú tunelmi pospájané tak, že z ktorejkoľvek budovy vedie do ktorejkoľvek inej budovy práve jedna cesta, pre ktorú platí, že každá budova sa na tejto ceste navštívi najviac jedenkrát. Experti určili, že pre takto poprepájané mestečko nie je potrebné, aby bol hasiaci prístroj v každej budove. Vymysleli však dve pravidlá, ktoré musia platiť: Pre každú budovu, v ktorej nie je hasiaci prístroj, bude hasiaci prístroj v aspoň jednej z jej susedných budov (teda tých, ktoré sú s ňou spojené tunelom). Pre každý tunel platí, že aspoň jedna z budov, ktoré tunel spája musí mať hasiaci prístroj. Vašou úlohou je vytvoriť program, ktorý pre danú konfiguráciu budov a tunelov určí počet hasiacich prístrojov, ktoré je potrebné naložiť do turborakety. Vstup Prvý riadok vstupu obsahuje celé číslo u (1 u 1000) vyjadrujúce počet úloh. Po nej nasleduje u blokov, každý pre jednu úlohu. Prvý riadok bloku obsahuje celé číslo n určujúce počet budov, pre ktoré platí 1 < n 1000. Potom nasleduje n riadkov, pričom i-ty riadok popisuje i-tu budovu. Riadok popisujúci jednu budovu pozostáva z celých čísel oddelených medzerou. Prvé číslo vyjadruje počet budov b, s ktorými je i-ta budova spojená tunelom (teda s ktorými susedí) a nasleduje b čísel vyjadrujúcich čísla budov, s ktorými i-ta budova susedí. Pre b platí 1 b n- 1. Výstup Výstup má pozostávať z u riadkov, pričom každý riadok bude obsahovať jedno celé číslo pre jednu úlohu. Toto číslo vyjadruje minimálny počet hasiacich prístrojov vo vesmírnom mestečku. 12
Ukážkový vstup 2 4 3 2 3 4 1 1 1 1 1 1 16 4 6 12 15 16 3 3 8 10 4 2 4 6 9 1 3 1 6 3 1 3 5 1 15 1 2 1 3 1 2 1 16 1 1 1 15 1 15 4 1 7 13 14 2 1 11 Ukážkový výstup 1 6 13
Faktoriál Opäť nastal čas na odpočinok, keď všetko prebieha podľa plánu a nevynárajú sa žiadne problémy. Fiškus opäť vystrkuje rožky. S kusom papiera v ruke pristupuje k vám a prekvapivo nevyzerá namyslene ale skleslo. Dostal som úlohu od kamaráta. Vždy chce zo mňa urobiť hlupáka. Teraz mi však dal úlohu, s ktorou si neviem rady. Príde vám ho ľúto, ako tam stojí so zadaním úlohy v ruke, a tak si ho vypočujete. Zisti, koľko núl sa nachádza na konci faktoriálu z prirodzeného čísla n v zadanej číselnej sústave b, prečíta z papiera a dodá: Chce, aby som to vyriešil všeobecne, vraj stačí program. Na jednej strane vám ho je stále ľúto, no na druhej strane si spomínate na jeho úškrn, keď vám zadával úlohu s dominom a poviete si, že ho pokoríte. Preto napíšte program na vyriešenie jeho úlohy. Vstup Prvý riadok vstupu obsahuje jedno celé číslo u (1 u 1000) vyjadrujúce počet úloh. Potom nasleduje u riadkov, každý pre jednu úlohu. Riadok pre jednu úlohu pozostáva z dvoch celých čísel n a b oddelených medzerou. Číslo n je zapísané v desiatkovej sústave a vyjadruje prirodzené číslo (0 < n 10000). Číslo b je základ číselnej sústavy, v ktorej treba vyjadriť výsledok faktoriálu, pričom platí 2 b 62. Jednotlivé cifry výsledného faktoriálu môžu teda byť z množiny {0 9, a z, A Z}. Výstup Pre každú z u úloh vypíšte v jednom riadku počet núl na konci faktoriálu z čísla n v sústave b. Výsledný počet uvádzajte v desiatkovej sústave. Ukážkový vstup 4 5 16 5 10 12 2 12 18 Ukážkový výstup 0 1 10 2 14
Nápisy pre vesmírne budovy V čase, keď už odštartovala druhá turboraketa plná zásob vody, hasiacich prístrojov a všelijakých ďalších zásob, zistili jednu nemilú vec. Do nákladu rakety sa nedali všetky nálepky, z ktorých mali na budovách vesmírneho mestečka vytvoriť logá a nápisy. Pôvodne vymysleli, že všetky nápisy sa budú skladať z nálepiek rôznych tvarov. Teraz však zistili, že neposlali všetky potrebné vzory. Na palube sú len nálepky týchto dvoch tvarov: Najprv sa dohadovali, či by sa z tých nálepiek nemohlo odstrihávať, ale vzhľadom na odolný materiál, z ktorého sú nálepky vyrobené, je takmer nemožné z nich niečo vystrihnúť bez toho, aby sa nezničili. Tak vám pridelili ďalšiu úlohu, ktorej ani nepridelili oficiálne meno. Máte vytvoriť program, ktorý pre daný náčrt nápisu určí, či ho je možné poskladať z nálepiek tohto tvaru, pričom sa nálepky nemôžu strihať, ani prelepovať časti jednej cez druhú. Môžu sa lepiť len na podklad. Medzi nimi a okolo nich môže byť voľné miesto akéhokoľvek tvaru. Vstup Vstup obsahuje náčrty jednotlivých nápisov. Na prvom riadku je počet blokov vstupu určujúci počet nápisov u (1 u 1000). Každé zadanie predstavuje náčrt nápisu nakreslený na štvorčekovom papieri. Zadanie obsahuje na prvom riadku dve čísla v a s vyjadrujúce výšku a šírku náčrtu. Potom nasleduje v riadkov po s znakoch, 3 v, s 200, ktoré sú buď bodka (znak.) alebo znak #. # vyjadruje miesto, na ktoré treba nalepiť nálepku. Bodka reprezentuje podklad. Samotné dve nálepky by boli v takomto náčrte nakreslené takto:.#. ###.#. ### ### ### Výstup Program pre každý náčrt nápisu vypíše odpoveď ANO, ak možno nápis poskladať z uvedených dvoch typov nálepiek, alebo NIE, ak to možné nie je. 15
Ukážkový vstup 2 6 7...#....####.. #####...#####..####....#... 5 5... ####..###..###.... Ukážkový výstup ANO NIE 16