Oi 7

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 146

MINISTERSTWO EDUKACJI NARODOWEJ INSTYTUT INFORMATYKI UNIWERSYTETU WROCAWSKIEGO KOMITET GWNY OLIMPIADY INFORMATYCZNEJ

VII OLIMPIADA INFORMATYCZNA 1999/2000

WARSZAWA, 2000

Autorzy tekstw: Piotr Chrzstowski-Wachtel Krzysztof Diks Wojciech Guzicki Marcin Kubica Adam Malinowski Marcin Mucha prof. dr hab. Wojciech Rytter Marcin Sawicki mgr Krzysztof Sobusiak Tomasz Wale Autorzy programw na dyskietce: Marcin Mucha Marek Pawlicki Piotr Sankowski Marcin Sawicki mgr Krzysztof Sobusiak Tomasz Wale Pawe Wol Opracowanie i redakcja: dr hab. Krzysztof Diks Tomasz Wale Skad: Tomasz Wale dr dr hab. dr hab. dr dr

Pozycja dotowana przez Ministerstwo Edukacji Narodowej. Druk ksiki zosta snansowany przez c Copyright by Komitet Gwny Olimpiady Informatycznej Orodek Edukacji Informatycznej i Zastosowa Komputerw ul. Raszyska 8/10, 02026 Warszawa ISBN 8390630168

Spis treci
Spis treci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Wstp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 Sprawozdanie z przebiegu VII Olimpiady Informatycznej . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Regulamin Olimpiady Informatycznej . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Zasady organizacji zawodw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Informacja o XI Midzynarodowej Olimpiadzie Informatycznej . . . . . . . . . . . . . . . . . . . 37 Zawody I stopnia opracowania zada 39 Gdzie zbudowa browar? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Wirusy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Narciarze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Paski . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Zawody II stopnia opracowania zada 69 Podpisy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Automorzmy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Trjramienny dwig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 Kod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87 Labirynt studni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 Zawody III stopnia opracowania zada 107 Lollobrygida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Jajka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Po-amana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 Agenci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Powtrzenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .135 Promocja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 XI Midzynarodowa Olimpiada Informatyczna treci zada 143 Kwiaciarnia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 Kody . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 Podziemne miasto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 wiata drogowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 Spaszczanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 Pas ziemi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Literatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .163

Krzysztof Diks

Wstp
W roku szkolnym 1999/2000 odbya si VII Olimpiada Informatyczna. Komitet Gwny Olimpiady, w tej corocznej publikacji, przekazuje Czytelnikom ocjalne sprawozdanie z przebiegu Olimpiady, treci zada z poszczeglnych etapw wraz z rozwizaniami autorskimi, dyskietk zawierajc wzorcowe programy oraz testy, ktre posuyy do sprawdzania rozwiza zawodnikw. W prezentowanej ksieczce mona znale take Regulamin Olimpiady Informatycznej oraz Zasady Organizacji Zawodw w roku szkolnym 1999/2000. Przedstawiamy te krtkie sprawozdanie z XI Midzynarodowej Olimpiady Informatycznej, ktra odbya si w padzierniku 1999 r. w miejscowoci Antayla-Belek, w Turcji. Wzili w niej udzia zwycizcy VI Olimpiady Informatycznej. Dla penoci obrazu zaczamy treci zada z tej olimpiady. Olimpiada Informatyczna jest olimpiad, ktrej uczestnicy musz si wykaza wieloma umiejtnociami informatycznymi. Rozwizanie zadania olimpijskiego polega na wyuskaniu i wyspecykowaniu rzeczywistego problemu algorytmicznego ukrytego w treci zadania, dyskusji moliwych rozwiza (algorytmw) i wyborze tego najwaciwszego, dobraniu odpowiednich struktur danych, zaprogramowaniu rozwizania w wybranym jzyku programowania oraz dokadnym przetestowaniu otrzymanego programu. Etapy rozwizywania zadania olimpijskiego s rzeczywistymi etapami rozwizywania problemw, na jakie napotyka w swojej pracy kady informatyk. Zadania olimijskie nie s atwe, ale myl, e s ciekawe, pouczajce i przynosz wiele satysfakcji wszystkim, ktrzy prbuj si z nimi zmierzy. Chciabym w tym miejscu podzikowa autorom zada za ich pomysowo i aktywno w pracy nad zadaniami, oraz za przygotowanie omwie rozwiza zawartych w tej ksieczce. Mam nadziej, e bd one przydatne wszystkim, ktrzy przygotowywa si bd do udziau w kolejnych olimpiadach. Kade zadanie jest opracowywane przez jurorw. Bior oni na siebie du odpowiedzialno, poniewa to ich rozwizania s bezporednio konfrontowane z rozwizaniami zawodnikw. Dlatego bardzo gorco dzikuj wszystkim jurorom za ich solidno, profesjonalizm i czas powicony na przygotowanie wzorcowych rozwiza. Wyniki ich pracy mona znale na zaczonej dyskietce. Tak dua impreza, jak Olimpiada Informatyczna, nie mogaby si odby bez zaangaowania bardzo wielu ludzi, ktrzy pomagali w organizacji zawodw. Wszystkim im t drog skadam gorce podzikowania. Olimpiada Informatyczna ma wielu przyjaci, ktrzy wspomagali i uwietniali organizacj zawodw. Nale do nich: wsporganizator zawodw rma PROKOM Software SA; rma COMBIDATA Poland Sp. z o.o., ktra wspuczestniczya w organizacji zawodw II stopnia i bya wsporganizatorem naw; uczelnie: Akademia Grniczo-Hutnicza, Politechnika lska, Polsko-Japoska Wysza Szkoa Technik Komputerowych w Warszawie, Uniwersytet im. Mikoaja Kopernika, Uniwersytet Warszawski, Uniwersytet Wrocawski, fundatorzy nagrd i upominkw: Oglnopol-

Wstp
ska Fundacja Edukacji Komputerowej, PWNWydawnictwo Naukowe, Wydawnictwa NaukowoTechniczne, oraz IDG Poland. Wszystkim skadam gorce podzikowania. Krzysztof Diks

Autorzy i redaktorzy niniejszej pozycji starali si zadba o to, by do rk Czytelnika traa ksika wolna od wad i bdw. Wszyscy, ktrym pisanie i uruchamianie programw komputerowych nie jest obce, wiedz, jak trudnym jest takie zadanie. Przepraszajc z gry za usterki niniejszej edycji, prosimy P.T. Czytelnikw o informacje o dostrzeonych bdach. Pozwoli to nam unikn ich w przyszoci.

Ksik t, i jej poprzedniczki dotyczce zawodw II, III, IV, V i VI Olimpiady, mona zakupi: w sieci ksigarni Elektronika w Warszawie, odzi i Wrocawiu, w niektrych ksigarniach, w Komitecie Okrgowym Olimpiady Informatycznej w Warszawie: Orodek Edukacji Informatycznej i Zastosowa Komputerw, 02-026 Warszawa, ul. Raszyska 8/10, tel. (+22) 8226048, w sprzeday wysykowej za zaliczeniem pocztowym, w Komitecie Gwnym Olimpiady Informatycznej. Zamwienia prosimy przesya pod adresem 02026 Warszawa, ul. Raszyska 8/10. Niestety, nakad publikacji o pierwszej Olimpiadzie jest ju wyczerpany.

Komitet Gwny Olimpiady Informatycznej

Sprawozdanie z przebiegu VII Olimpiady Informatycznej 1999/2000

Olimpiada Informatyczna zostaa powoana 10 grudnia 1993 roku przez Instytut Informatyki Uniwersytetu Wrocawskiego, zgodnie z zarzdzeniem nr 28 Ministra Edukacji Narodowej z dnia 14 wrzenia 1992 roku.

ORGANIZACJA ZAWODW

W roku szkolnym 1999/2000 odbyy si zawody VII Olimpiady Informatycznej. Olimpiada Informatyczna jest trjstopniowa. Integraln czci rozwizania kadego zadania zawodw I, II i III stopnia jest program napisany na komputerze zgodnym ze standardem IBM PC, w jzyku programowania wysokiego poziomu (Pascal, C, C++). Zawody I stopnia miay charakter otwartego konkursu przeprowadzonego dla uczniw wszystkich typw szk modzieowych. 4 padziernika 1999 r. rozesano plakaty zawierajce zasady organizacji zawodw I stopnia oraz zestaw 4 zada konkursowych do 3350 szk i zespow szk modzieowych ponadpodstawowych oraz do wszystkich kuratorw i koordynatorw edukacji informatycznej. Zawody I stopnia rozpoczy si dnia 18 padziernika 1999 roku. Ostatecznym terminem nadsyania prac konkursowych by 15 listopada 1999 roku. Zawody II i III stopnia byy dwudniowymi sesjami stacjonarnymi, poprzedzonymi jednodniowymi sesjami prbnymi. Zawody II stopnia odbyy si w trzech okrgach, w Warszawie, Wrocawiu i Toruniu, oraz w Krakowie, Katowicach i Sopocie, w dniach 810 lutego 2000 r., natomiast zawody III stopnia odbyy si w orodku rmy Combidata Poland S.A., w Sopocie, w dniach 1115 kwietnia 2000 r. Uroczysto zakoczenia VII Olimpiady Informatycznej odbya si w dniu 15 kwietnia 2000 r. w sali posiedze Urzdu Miasta w Sopocie.

Sprawozdanie z przebiegu VII Olimpiady Informatycznej SKAD OSOBOWY KOMITETW OLIMPIADY INFORMATYCZNEJ
Komitet Gwny przewodniczcy: dr hab. Krzysztof Diks, prof. UW (Uniwersytet Warszawski) z-cy przewodniczcego: prof. dr hab. Maciej M. Syso (Uniwersytet Wrocawski) dr Andrzej Walat (Orodek Edukacji Informatycznej i Zastosowa Komputerw) czonek prezydium Komitetu Gwnego: dr hab. in. Stanisaw Waligrski, prof. UW (Uniwersytet Warszawski) sekretarz naukowy: dr Marcin Kubica (Uniwersytet Warszawski) kierownik Jury: dr Krzysztof Stencel (Uniwersytet Warszawski) kierownik organizacyjny: Tadeusz Kuran (Orodek Edukacji Inormatycznej i Zastosowa Komputerw) czonkowie: prof. dr hab. Zbigniew Czech (Politechnika lska) mgr Jerzy Daek (Ministerstwo Edukacji Narodowej) dr Przemysawa Kanarek (Uniwersytet Wrocawski) dr Krzysztof Lory (Uniwersytet Wrocawski) dr hab. Jan Madey, prof. UW (Uniwersytet Warszawski) prof. dr hab. Wojciech Rytter (Uniwersytet Warszawski) mgr Krzysztof J. wicicki (Ministerstwo Edukacji Narodowej) dr Maciej lusarek (Uniwersytet Jagielloski) dr Bolesaw Wojdyo (Uniwersytet Mikoaja Kopernika w Toruniu) sekretarz Komitetu Gwnego Monika Kozowska-Zajc (Orodek Edukacji Informatycznej i Zastosowa Komputerw) Siedzib Komitetu Gwnego Olimpiady Informatycznej jest Orodek Edukacji Informatycznej i Zastosowa Komputerw w Warszawie przy ul. Raszyskiej 8/10. Komitet Gwny odby 5 posiedze, a Prezydium 4 zebrania. 28 i 29 stycznia 2000 r. przeprowadzono seminarium przygotowujce przeprowadzenie zawodw II stopnia oraz omawiajce dalszy rozwj Olimpiady.

Komitet Okrgowy w Warszawie przewodniczcy: dr Wojciech Plandowski (Uniwersytet Warszawski)

Sprawozdanie z przebiegu VII Olimpiady Informatycznej


czonkowie: dr Marcin Kubica (Uniwersytet Warszawski) dr Adam Malinowski (Uniwersytet Warszawski) dr Andrzej Walat (Orodek Edukacji Informatycznej i Zastosowa Komputerw) Siedzib Komitetu Okrgowego jest Orodek Edukacji Informatycznej i Zastosowa Komputerw w Warszawie, ul. Raszyska 8/10.

Komitet Okrgowy we Wrocawiu przewodniczcy: dr Krzysztof Lory (Uniwersytet Wrocawski) z-ca przewodniczcego: dr Helena Krupicka (Uniwersytet Wrocawski) sekretarz: in. Maria Woniak (Uniwersytet Wrocawski) czonkowie: mgr Jacek Jagieo (Uniwersytet Wrocawski) dr Tomasz Jurdziski (Uniwersytet Wrocawski) dr Przemysawa Kanarek (Uniwersytet Wrocawski) dr Witold Karczewski (Uniwersytet Wrocawski) Siedzib Komitetu Okrgowego jest Instytut Informatyki Uniwersytetu Wrocawskiego we Wrocawiu, ul. Przesmyckiego 20.

Komitet Okrgowy w Toruniu przewodniczcy: prof. dr hab. Jzef Somiski (Uniwersytet Mikoaja Kopernika w Toruniu) z-ca przewodniczcego: dr Mirosawa Skowroska (Uniwersytet Mikoaja Kopernika w Toruniu) sekretarz: dr Bolesaw Wojdyo (Uniwersytet Mikoaja Kopernika w Toruniu) czonkowie: mgr Anna Kwiatkowska (IV Liceum Oglnoksztacce w Toruniu) dr Krzysztof Skowronek (V Liceum Oglnoksztacce w Toruniu). Siedzib Komitetu Okrgowego w Toruniu jest Wydzia Matematyki i Informatyki Uniwersytetu Mikoaja Kopernika w Toruniu, ul. Chopina 12/18.

10

Sprawozdanie z przebiegu VII Olimpiady Informatycznej JURY OLIMPIADY INFORMATYCZNEJ


W pracach Jury, ktre nadzorowa dr hab. Krzysztof Diks, a ktrymi kierowa dr Krzysztof Stencel, brali udzia pracownicy i studenci Instytutu Informatyki Wydziau Matematyki, Informatyki i Mechaniki Uniwersytetu Warszawskiego: Adam Borowski mgr Marcin Engel Andrzej Gsienica-Samek Marcin Mucha Marek Pawlicki Piotr Sankowski Marcin Sawicki Marcin Stefaniak Tomasz Wale Pawe Wol

ZAWODY I STOPNIA
W VII Olimpiadzie Informatycznej wzio udzia 757 zawodnikw. Decyzj Komitetu Gwnego Olimpiady do zawodw zostao dopuszczonych 2 uczniw gimnazjum i 3 uczniw szk podstawowych: Gimnazjum nr 1 im. M. Konopnickiej w Gdyni Piotr Kowalczyk Remigiusz Modrzejewski S. P. nr 12 w Piotrkowie Trybunalskim ukasz Krysiak S. P. nr 42 w Gliwicach Leszek Knoll Prywatna S. P. nr 2 w Sosnowcu Micha Koziak W VII Olimpiadzie Informatycznej sklasykowano 757 zawodnikw. Z rozwizaniami: czterech zada nadeszo trzech zada nadeszo dwch zada nadeszo jednego zadania nadeszo 360 prac 201 prac 111 prac 85 prac

Sprawozdanie z przebiegu VII Olimpiady Informatycznej


Kolejno wojewdztw pod wzgldem liczby uczestnikw jest nastpujca:

11

mazowieckie lskie maopolskie podkarpackie pomorskie kujawsko-pomorskie wielkopolskie dolnolskie dzkie lubelskie lubuskie witokrzyskie podlaskie warmisko-mazurskie zachodniopomorskie opolskie

111 zawodnikw 97 89 61 60 55 52 42 38 35 24 22 21 20 20 10

W zawodach I stopnia najliczniej reprezentowane byy szkoy:

III L.O. im. Marynarki Wojennej RP w Gdyni V L.O. im. A Witkowskiego w Krakowie XIV L.O. im. St. Staszica w Warszawie VIII L.O. im. A. Mickiewicza w Poznaniu I L.O. im. St. Staszica w Lublinie II L.O. im. C. K. Norwida w Tychach VI L.O. im. J. i J. niadeckich w Bydgoszczy IV L.O. im. T. Kociuszki w Toruniu II L.O. im. J. Chreptowicza w Ostrowcu witokrzyskim L.O. im. M. SkodowskiejCurie w Pile VI L.O. im. J. Kochanowskiego w Radomiu VIII L.O. im. M. SkodowskiejCurie w Katowicach Zesp Szk w Kaczudze I L.O. im. A. Mickiewicza w Biaymstoku I L.O. im. A. Osuchowskiego w Cieszynie I L.O. im. M. SkodowskiejCurie w Szczecinie I L.O. im. St. Staszica w Zgierzu I L.O. im. T. Kociuszki w Lesznie I L.O. im. Ziemii Kujawskiej we Wocawku II L.O. im. Krlowej Jadwigi w Siedlcach XIV L.O. im. Polonii Belgijskiej we Wrocawiu

35 zawodnikw 33 13 12 11 9 9 8 7 7 7 6 6 5 5 5 5 5 5 5 5

12

Sprawozdanie z przebiegu VII Olimpiady Informatycznej


Oglnie najliczniej reprezentowane byy miasta: Warszawa 66 uczniw Krakw 58 Gdynia 43 Bydgoszcz 27 Pozna 25 Lublin 20 Czstochowa 15 d 15 Rzeszw 15 Wrocaw 14 Radom 13 Szczecin 13 Tychy 13 Katowice 11 Gdask 10 Inowrocaw 10 Siedlce 10 Cieszyn 9 Kielce 9 Mielec 9 Zawodnicy uczszczali do nastpujcych klas: do do do do do do do klasy klasy klasy klasy klasy klasy klasy I VIII I II III IV V gimnazjum szkoy podstawowej szkoy redniej 2 zawodnikw 3 45 183 256 252 16 Gliwice Gorzw Wlkp. Biaystok Ostrowiec w. Pia Gogw Kaczuga Koszalin Opole Pock Stalowa Wola Toru Wocawek Zielona Gra Elblg Legnica Leszno Olsztyn Oawa Zgierz 8 8 7 7 7 6 6 6 6 6 6 6 6 6 5 5 5 5 5 5

Zawodnicy najczciej uywali nastpujcych jzykw programowania: Pascal rmy Borland C/C++ rmy Borland Ponadto pojawiy si : Watcom C/C++ GNU C/C++ Ansi C Visual C Symantec C/C++ DJGPP 3 11 5 11 1 7 prace prac prac prac praca prac 529 prac 190 prac

Sprawozdanie z przebiegu VII Olimpiady Informatycznej


Komputerowe wspomaganie umoliwio sprawdzenie prac zawodnikw kompletem 154-ch testw. Ponisza tabela przedstawia liczby zawodnikw, ktrzy uzyskali okrelone liczby punktw za poszczeglne zadania, w zestawieniach ilociowym i procentowym:
Gdzie zbudowa browar? liczba zawodn. 100 pkt. 9975 pkt. 7450 pkt. 491 pkt. 0 pkt. czyli Wirusy Narciarze Paski

13

liczba zawodn.

czyli

liczba zawodn.

czyli

liczba zawodn.

czyli

58 51 16 358 274

7,7% 6,7% 2,1% 47,3% 36,2%

12 6 24 189 526

1,6% 0,8% 3,2% 25,0% 69,4%

114 55 114 224 250

15,1% 7,3% 15,1% 29,5% 33,0%

1 0 0 130 626

0,1% 0,0% 0,0% 17,2% 82,7%

W sumie za wszystkie 4 zadania: SUMA


400 pkt. 399300 pkt. 299200 pkt. 1991 pkt. 0 pkt. liczba zawodnikw czyli

0 8 68 539 142

0,0% 1,1% 9,0% 71,2% 18,7%

Wszyscy zawodnicy otrzymali listy ze swoimi wynikami oraz dyskietkami zawierajcymi ich rozwizania i testy, na podstawie ktrych oceniano prace.

ZAWODY II STOPNIA
Do zawodw II stopnia zakwalikowano 191 zawodnikw, ktrzy osignli w zawodach I stopnia wynik nie mniejszy ni 118 pkt. Zawody II stopnia odbyy si w dniach 8-10 lutego 2000 r. w trzech staych okrgach oraz w Krakowie, Katowicach i Sopocie: w Toruniu 24 zawodnikw z nastpujcych wojewdztw: kujawsko-pomorskie (11), dzkie (3), mazowieckie (3), pomorskie (6),

14

Sprawozdanie z przebiegu VII Olimpiady Informatycznej


warmisko-mazurskie (1), we Wrocawiu 44 zawodnikw z nastpujcych wojewdztw: dolnolskie (9), lubuskie (7), dzkie (4), maopolskie (7), opolskie (2), lskie (5), wielkopolskie (9), zachodniopomorskie (1), w Warszawie 49 zawodnikw z nastpujcych wojewdztw: lubelskie (8), dzkie (3), maopolskie (9), mazowieckie (21), podkarpackie (2), podlaskie (6), w Krakowie 36 zawodnikw z nastpujcych wojewdztw: lubelskie (2), maopolskie (21), podkarpackie (12), witokrzyskie (1), w Katowicach 21 zawodnikw z nastpujcych wojewdztw: maopolskie (8), podkarpackie (1), lskie (12), w Sopocie 17 zawodnikw z nastpujcych wojewdztw: kujawsko-pomorskie (5), dzkie (1), pomorskie (9), warmisko-mazurskie (2).

Sprawozdanie z przebiegu VII Olimpiady Informatycznej


W zawodach II stopnia najliczniej reprezentowane byy szkoy:

15

V L.O. im. A. Witkowskiego w Krakowie III L.O. im. Marynarki Wojennej RP w Gdyni I L.O. im. St. Staszica w Lublinie VI L.O. im. J. Kochanowskiego w Radomiu VI L.O. im. J. i J. niadeckich w Bydgoszczy XIV L.O. im. St. Staszica w Warszawie I L.O. im. A. Mickiewicza w Biaymstoku IV L.O. im. T. Kociuszki w Toruniu XIV L.O. im. Polonii Belgijskiej we Wrocawiu II L.O. im. L. Lisa-Kuli w Rzeszowie VIII L.O. im. A. Mickiewicza w Poznaniu

30 uczniw 12 7 6 6 6 5 5 5 4 3

Oglnie najliczniej reprezentowane byy miasta: Krakw Warszawa Gdynia Bydgoszcz Lublin Biaystok d Radom Rzeszw Wrocaw Toru Gorzw Wlkp. Pozna Katowice Stalowa Wola ywiec 36 zawodnikw 15 13 11 7 6 6 6 6 6 5 4 4 3 3 3

8 lutego odbya si sesja prbna, na ktrej zawodnicy rozwizywali nie liczce si do oglnej klasykacji zadanie Podpisy. W dniach konkursowych zawodnicy rozwizywali zadania: Automorzmy maksymalnie 60 pkt, Trjramienny dwig maksymalnie 40 pkt, Labirynt studni i Kod oceniane, kade, maksymalnie po 50 punktw. Omiu zawodnikw nie stawio si na zawody. Do automatycznego sprawdzania 4 zada konkursowych zastosowano cznie 142 testy. Ponisze tabele przedstawiaj liczby zawodnikw, ktrzy uzyskali okrelone liczby punktw za poszczeglne zadania, w zestawieniach ilociowym i procentowym:

16

Sprawozdanie z przebiegu VII Olimpiady Informatycznej


Automorzmy
liczba zawodnikw 60 pkt. 5940 pkt. 3920 pkt. 191 pkt. 0 pkt. czyli

2 4 27 38 12

2,4% 4,8% 32,5% 45,8% 14,5%

Trjramienny dwig
liczba zawodnikw 40 pkt. 3930 pkt. 2920 pkt. 191 pkt. 0 pkt. czyli

30 15 18 55 65

16,4% 8,2% 9,8% 30,1% 35,5%

Kod
liczba zawodnikw 50 pkt. 4930 pkt. 2920 pkt. 191 pkt. 0 pkt. czyli

27 3 4 91 58

14,8% 1,6% 2,2% 49,7% 31,7%

Labirynt studni
liczba zawodnikw 50 pkt. 4930 pkt. 2920 pkt. 191 pkt. 0 pkt. czyli

6 17 37 54 69

3,3% 9,3% 20,2% 29,5% 37,7%

W sumie za wszystkie 4 zadania, przy najwyszym wyniku wynoszcym 200 pkt.: SUMA
200 pkt. 199100 pkt. 9950 pkt. 491 pkt. 0 pkt. liczba zawodnikw czyli

1 22 51 94 15

0,5% 12,0% 27,9% 51,4% 8,2%

Sprawozdanie z przebiegu VII Olimpiady Informatycznej


Na uroczystym zakoczeniu zawodw II stopnia zawodnicy otrzymali upominki ksikowe ufundowane przez Wydawnictwa Naukowo-Techniczne. Zawodnikom przesano listy z wynikami zawodw i dyskietkami zawierajcymi ich rozwizania i testy, na podstawie ktrych oceniano prace.

17

ZAWODY III STOPNIA


Zawody III stopnia odbyy si w orodku rmy Combidata Poland S.A. w Sopocie, w dniach od 11 do 15 kwietnia 2000 r. W zawodach III stopnia wzio udzia 44 najlepszych uczestnikw zawodw II stopnia, ktrzy uzyskali wynik nie mniejszy ni 71 pkt. Zawodnicy pochodzili z nastpujcych wojewdztw: maopolskie podkarpackie kujawsko-pomorskie mazowieckie pomorskie lskie witokrzyskie dzkie lubelskie warmisko-mazurskie wielkopolskie dolnolskie opolskie podlaskie 9 zawodnikw 6 4 4 4 4 4 3 2 2 2 1 1 1

Niej wymienione szkoy miay w nale wicej ni jednego zawodnika: V L.O. im. A. Witkowskiego w Krakowie XIV L.O. im. St. Staszica w Warszawie III L.O. im. A. Mickiewicza w Tarnowie VI L.O. im. J. i J. niadeckich w Bydgoszczy III L.O. im. Marynarki Wojennej RP w Gdyni IV L.O. im. M. Kopernika w Rzeszowie I L.O. im. J. niadeckiego w Pabianicach 6 zawodnikw 3 2 2 2 2 2

11 kwietnia odbya si sesja prbna, na ktrej zawodnicy rozwizywali nie liczce si do oglnej klasykacji zadanie Lollobrygida. W dniach konkursowych zawodnicy rozwizywali zadania: Jajka, Poamana oceniane maksymalnie po 60 punktw oraz Agenci, Promocja i Powtrzenia oceniane maksymalnie po 40 punktw. Sprawdzanie przeprowadzono korzystajc z programu sprawdzajcego, przygotowanego przez Marka Pawlickiego i Piotra Sankowskiego, ktry umoliwi czciowe sprawdzenie zada z danego dnia w obecnoci zawodnika. Zastosowano cznie 76 testw.

18

Sprawozdanie z przebiegu VII Olimpiady Informatycznej


Ponisze tabele przedstawiaj liczby zawodnikw, ktrzy uzyskali okrelone liczby punktw za poszczeglne zadania konkursowe, w zestawieniach ilociowym i procentowym: Jajka
liczba zawodnikw 60 pkt. 5940 pkt. 3920 pkt. 191 pkt. 0 pkt. czyli

2 0 10 18 14

4,6% 0,0% 22,7% 40,9% 31,8%

Poamana
liczba zawodnikw 60 pkt. 5940 pkt. 3920 pkt. 191 pkt. 0 pkt. czyli

8 7 3 6 20

18,2% 15,9% 6,8% 13,6% 45,5%

Agenci
liczba zawodnikw 40 pkt. 3930 pkt. 2920 pkt. 191 pkt. 0 pkt. czyli

2 1 9 19 13

4,5% 2,3% 20,5% 43,2% 29,5%

Powtrzenia
liczba zawodnikw 40 pkt. 3930 pkt. 2920 pkt. 191 pkt. 0 pkt. czyli

11 2 14 8 9

25,0% 4,5% 31,8% 18,2% 18,2%

Sprawozdanie z przebiegu VII Olimpiady Informatycznej


Promocja
liczba zawodnikw 40 pkt. 3930 pkt. 2920 pkt. 191 pkt. 0 pkt. czyli

19

2 4 18 6 14

4,6% 9,1% 40,9% 13,6% 31,8%

W sumie za wszystkie 5 zada: SUMA


240 pkt. 239160 pkt. 15980 pkt. 791 pkt. 0 pkt. liczba zawodnikw czyli

0 3 18 22 1

0,0% 6,8% 40,9% 50,0% 2,3%

W dniu 15 kwietnia 2000 roku w gmachu Urzdu Miasta w Sopocie ogoszono wyniki nau VII Olimpiady Informatycznej 1999/2000 i rozdano nagrody ufundowane przez: PROKOM Software S.A., Oglnopolsk Fundacj Edukacji Komputerowej, Wydawnictwa Naukowo-Techniczne, PWN-Wydawnictwo Naukowe, IDG Poland i Olimpiad Informatyczn. Poniej zestawiono list wszystkich laureatw wraz z przyznanymi nagrodami: (1) Tomasz Czajka, laureat I miejsca, 223 pkt., L.O. im. K.E.N. w Stalowej Woli, (notebook PROKOM, roczny abonament na ksiki WNT) (2) Krzysztof Onak, laureat I miejsca, 204 pkt., III L.O. im. A. Mickiewicza w Tarnowie, (notebook PROKOM) (3) Tomasz Malesiski, laureat I miejsca, 178 pkt., Z. S. Elektronicznych im. J. Groszkowskiego w Biaymstoku, (notebook PROKOM) (4) Grzegorz Stelmaszek, laureat II miejsca, 150 pkt., XIV L.O. im. Polonii Belgijskiej we Wrocawiu, (notebook PROKOM) (5) Rafa Rusin, laureat II miejsca, 145 pkt., II L.O. im. L. Lisa-Kuli w Rzeszowie, (drukarka laserowa PROKOM, prenumerata roczna PC World Komputer IDG Poland) (6) Grzegorz Herman, laureat II miejsca, 141 pkt., V L.O. im. A. Witkowskiego w Krakowie, (drukarka laserowa PROKOM, prenumerata roczna PC World Komputer IDG Poland) (7) Jan Jeabek, laureat II miejsca, 139 pkt., V L.O. im. A. Witkowskiego w Krakowie, (drukarka laserowa PROKOM, prenumerata roczna PC World Komputer IDG Poland)

20

Sprawozdanie z przebiegu VII Olimpiady Informatycznej


(8) Przemysaw Broniek, laureat II miejsca, 137 pkt., V L.O. im. A. Witkowskiego w Krakowie, (drukarka laserowa PROKOM, prenumerata roczna PC World Komputer IDG Poland) (9) Jakub Pidel, laureat II miejsca, 126 pkt., XIV L.O. im. St. Staszica w Warszawie, (drukarka laserowa PROKOM, prenumerata roczna PC World Komputer IDG Poland) (10) Krzysztof Kluczek, laureat III miejsca, 115 pkt., L.O. im. St. eromskiego w Bartoszycach, (drukarka laserowa PROKOM, prenumerata roczna PC World Komputer IDG Poland) (11) Krzysztof Ocetkiewicz, laureat III miejsca, 114 pkt., VI L.O. im. J. i J. niadeckich w Bydgoszczy, (drukarka laserowa PROKOM, prenumerata roczna PC World Komputer IDG Poland) (12) Pawe Parys, laureat III miejsca, 106 pkt., L.O. im. St. Staszica w Tarnowskich Grach, (drukarka atramentowa PROKOM, ksika Matematyka konkretna PWN) (13) Tomasz Szydo, laureat III miejsca, 106 pkt., IV L.O. im. M. Kopernika w Rzeszowie, (drukarka atramentowa PROKOM, ksika Matematyka konkretna PWN) (14) Tomasz Dobrowolski, laureat III miejsca, 105 pkt., IX L.O. w Gdasku, (drukarka atramentowa PROKOM, ksika Matematyka konkretna PWN) (15) Wadysaw Bodzek, laureat III miejsca, 102 pkt., I Katolickie L.O. im. Jana III Sobieskiego w Bydgoszczy, (drukarka atramentowa PROKOM, ksika Matematyka konkretna PWN) (16) Micha Adamaszek, laureat III miejsca, 99 pkt., V L.O. w Bielsku-Biaej, (drukarka atramentowa PROKOM, ksika Matematyka konkretna PWN) (17) Wojciech Matyjewicz, laureat III miejsca, 99 pkt., III L. O. im. A. Mickiewicza w Tarnowie, (drukarka atramentowa PROKOM, ksika Matematyka konkretna PWN) (18) Pawe Walter, laureat III miejsca, 96 pkt., V L.O. im. A. Witkowskiego w Krakowie, (drukarka atramentowa PROKOM, ksika Matematyka konkretna PWN) (19) Piotr Skibiski, laureat III miejsca, 92 pkt., IV L.O. im. M. Kopernika w Rzeszowie, (drukarka atramentowa Olimpiada Informatyczna, ksika Matematyka konkretna PWN) Wszyscy nalici otrzymali ksiki ufundowane przez WNT, a ci ktrzy nie byli laureatami otrzymali zegarki CASIO ufundowane przez Oglnopolsk Fundacj Edukacji Komputerowej. Ogoszono komunikat o powoaniu reprezentacji Polski, na Olimpiad Informatyczn Centralnej Europy w Cluj w Rumunii oraz na Midzynarodow Olimpiad Informatyczn w Pekinie w Chinach, w skadzie:

Sprawozdanie z przebiegu VII Olimpiady Informatycznej


(1) Tomasz Czajka (2) Krzysztof Onak (3) Tomasz Malesiski (4) Grzegorz Stelmaszek zawodnikami rezerwowymi zostali: (5) Rafa Rusin (6) Grzegorz Herman oraz na Batyck Olimpiad Informatyczn w Sztokholmie, w skadzie: (1) Tomasz Malesiski (2) Grzegorz Stelmaszek (3) Grzegorz Herman (4) Jakub Pidel (5) Krzysztof Kluczek (6) Krzysztof Ocetkiewicz zawodnikami rezerwowymi zostali: (7) Pawe Parys (8) Wadysaw Bodzek Sekretariat olimpiady wystawi cznie 44 zawiadczenia o zakwalikowaniu do zawodw III stopnia celem przedoenia dyrekcji szkoy. Sekretariat wystawi cznie 19 zawiadcze o uzyskaniu tytuu laureata i 25 zawiadcze o uzyskaniu tytuu nalisty VII Olimpiady Informatycznej celem przedoenia wadzom szk wyszych. Finalici zostali poinformowani o decyzjach senatw wielu szk wyszych dotyczcych przyj na studia z pominiciem zwykego postpowania kwalikacyjnego. Komitet Gwny wyrni za wkad pracy w przygotowanie nalistw Olimpiady nastpujcych opiekunw naukowych: Klemens Czajka (Huta Stalowa Wola) Tomasz Czajka (laureat I miejsca) Jan Onak (Zesp Szk Mechaniczno-Elektrycznych w Tarnowie) Krzysztof Onak (laureat I miejsca) Joanna Ewa uszcz (Zesp Szk Elektrycznych w Biaymstoku) Tomasz Malesiski (laureat I miejsca) Lech Stelmaszek (Pracownia zastosowa informatyki INFOS, Wrocaw ) Grzegorz Stelmaszek (laureat II miejsca)

21

22

Sprawozdanie z przebiegu VII Olimpiady Informatycznej


Bogusaw Rusin (F.A.H. Minar w Rzeszowie) Rafa Rusin (laureat II miejsca) Andrzej Dyrek (Uniwersytet Jagielloski w Krakowie) Grzegorz Herman (laureat II miejsca) Jan Jeabek (laureat II miejsca) Przemysaw Broniek (laureat II miejsca) Pawe Walter (laureat III miejsca) Micha Kosek (nalista) Grzegorz ukasik (nalista) Katarzyna LewiskaPidel (Zakad Sitodruku Ma Print w Otwocku) Jakub Pidel (laureat II miejsca) Zdzisaw Kluczek (Key Electronics w Bartoszycach) Krzysztof Kluczek (laureat III miejsca) Iwona Waszkiewicz (VI L.O. w Bydgoszczy) Krzysztof Ocetkiewicz (laureat III miejsca) Roman omowski (nalista) Krzysztof elazowski (Z. S. O. im. St. Staszica w Tarnowskich Grach) Pawe Parys (laureat III miejsca) Janusz Szydo (Rzeszw), Mariusz Kraus (IV L.O. w Rzeszowie) Tomasz Szydo (laureat III miejsca) Waldemar Dobrowolski (ZR RADMOR S.A. w Gdyni) Tomasz Dobrowolski (laureat III miejsca) Lech Bodzek (Poczta Polska, Centralny Orodek Rozliczeniowy w Bydgoszczy) Wadysaw Bodzek (laureat III miejsca) Anna Kowalska (V L.O. w Bielsku-Biaej) Micha Adamaszek (laureat III miejsca) Pawe Guraj (Warszawa) Grzegorz Andruszkiewicz (laureat III miejsca) Janusz Matyjewicz (AMPLI S.A. w Tarnowie) Wojciech Matyjewicz (laureat III miejsca) Aleksander Skibiski (ARCUS biuro projektw w Rzeszowie)

Sprawozdanie z przebiegu VII Olimpiady Informatycznej


Piotr Skibiski (laureat III miejsca) Marek Adamiak (AUTOSAN S. A. w Sanoku) Marek Adamiak (nalista) Krzysztof Stefaski (VIII L.O. im. A. Mickiewicza w Poznaniu) Jan Chmiel (nalista) Kazimierz Cwalina (Ministerstwo Gospodarki w Warszawie) Karol Cwalina (nalista) Mirosaw Modzelewski (VI L.O. w Radomiu) Jacek Erd (nalista) Jan Gibek (Elektrownia Skawina S. A. w Skawinie) Marek Gibek (nalista) Zbigniew Gocaliski (KWK Makoszowy stacja sejsmoakustyki w Zabrzu) Igor Gocaliski (nalista) Magorzata Tatar (Z. S. Elektronicznych i Telekomunikacyjnych w Olsztynie) Tomasz Kolinko (nalista) Edyta Pobiega (II L.O. im. J. Chreptowicza w Ostrowcu witokrzyskim) Piotr Kowalski (nalista) Stanisaw Kwaniewicz (II L.O. we Wodawie) Micha Kozowski (nalista) Anna Hertleb (I L.O. im. J. niadeckiego w Pabianicach) Micha Malinowski (nalista) Micha Malinowski (Dobro) Piotr Malinowski (nalista) Halina Michalska (Lewin Brzeski) Micha Michalski (nalista) Marek Noworyta (Centrozap S. A. w Katowicach) Filip Noworyta (nalista) Ryszard Szubartowski (Gdyskie Liceum Autorskie i III L.O. im. Marynarki Wojennej RP w Gdyni) Tomasz Pyra (nalista) Dominik Wojtczak (nalista) Marcin Zawadzki (nalista)

23

24

Sprawozdanie z przebiegu VII Olimpiady Informatycznej


Marek Sadziak (EL-KAM S. C. w Warszawie) Sawomir Sadziak (nalista) Alicja Skalska (V L.O. w Bydgoszczy) Kamil Skalski (nalista) Ewa Stawicka (ask-Kolumna) Pawe Stawicki (nalista) Mirosaw Kulik (I L.O. im. St. Staszica w Lublinie) Stanisaw Wierchoa (nalista) Tomasz Radko (Katolickie L.O. Ksiy Pijarw w Krakowie) Marcin Wojnarski (nalista) Zgodnie z Rozporzdzeniem MEN w sprawie olimpiad, tylko wyrnieni nauczyciele otrzymaj nagrody pienine. Wszystkim laureatom i nalistom wysano przesyki zawierajce dyskietki z ich rozwizaniami oraz testami, na podstawie ktrych oceniono ich prace.

Warszawa, dn. 7 czerwca 2000 roku

Komitet Gwny Olimpiady Informatycznej

Regulamin Olimpiady Informatycznej

1 WSTP
Olimpiada Informatyczna jest olimpiad przedmiotow powoan przez Instytut Informatyki Uniwersytetu Wrocawskiego, ktry jest organizatorem Olimpiady, zgodnie z zarzdzeniem nr 28 Ministra Edukacji Narodowej z dnia 14 wrzenia 1992 roku (Dz. Urz. MEN nr 7 z 1992 r. poz. 31) z pniejszymi zmianami (zarzdzenie Ministra Edukacji Narodowej nr 19 z dnia 20 padziernika 1994 r., Dz. Urz. MEN nr 5 z 1994 r. poz. 27). W organizacji Olimpiady Instytut wspdziaa ze rodowiskami akademickimi, zawodowymi i owiatowymi dziaajcymi w sprawach edukacji informatycznej.

2 CELE OLIMPIADY INFORMATYCZNEJ


(1) Stworzenie motywacji dla zainteresowania nauczycieli i uczniw nowymi metodami informatyki. (2) Rozszerzanie wspdziaania nauczycieli akademickich z nauczycielami szk w ksztaceniu modziey uzdolnionej. (3) Stymulowanie aktywnoci poznawczej modziey informatycznie uzdolnionej. (4) Ksztatowanie umiejtnoci samodzielnego zdobywania i rozszerzania wiedzy informatycznej. (5) Stwarzanie modziey moliwoci szlachetnego wspzawodnictwa w rozwijaniu swoich uzdolnie, a nauczycielom warunkw twrczej pracy z modzie. (6) Wyanianie reprezentacji Rzeczypospolitej Polskiej na Midzynarodow Olimpiad Informatyczn, Olimpiad Informatyczn Centralnej Europy i inne midzynarodowe zawody informatyczne.

3 ORGANIZACJA OLIMPIADY
(1) Olimpiad przeprowadza Komitet Gwny Olimpiady Informatycznej.

26

Regulamin Olimpiady Informatycznej


(2) Olimpiada Informatyczna jest trjstopniowa. (3) W Olimpiadzie Informatycznej mog bra indywidualnie udzia uczniowie wszystkich typw szk rednich dla modziey (z wyjtkiem szk policealnych). (4) W Olimpiadzie mog rwnie uczestniczy za zgod Komitetu Gwnego uczniowie szk podstawowych. (5) Zestaw zada na kady stopie zawodw ustala Komitet Gwny, wybierajc je drog gosowania spord zgoszonych projektw. (6) Integraln czci rozwizania zada zawodw I, II i III stopnia jest program w jzyku programowania i rodowisku wybranym z listy jzykw i rodowisk ustalanej przez Komitet Gwny corocznie przed rozpoczciem zawodw i ogaszanej w Zasadach organizacji zawodw. (7) Zawody I stopnia maj charakter otwarty i polegaj na samodzielnym rozwizywaniu przez uczestnika zada ustalonych dla tych zawodw oraz nadesaniu rozwiza pod adresem Komitetu Gwnego Olimpiady Informatycznej w podanym terminie. (8) Liczb uczestnikw kwalikowanych do zawodw II i III stopnia ustala Komitet Gwny i podaje j w Zasadach organizacji zawodw na dany rok szkolny. (9) O zakwalikowaniu uczestnika do zawodw kolejnego stopnia decyduje Komitet Gwny na podstawie rozwiza zada niszego stopnia. Oceny zada dokonuje Jury powoane przez Komitet i pracujce pod nadzorem przewodniczcego Komitetu i sekretarza naukowego Olimpiady. Zasady oceny ustala Komitet na podstawie propozycji zgaszanych przez kierownika Jury oraz autorw i recenzentw zada. Wyniki proponowane przez Jury podlegaj zatwierdzeniu przez Komitet. (10) Komitet Gwny Olimpiady kwalikuje do zawodw II i III stopnia odpowiedni liczb uczestnikw, ktrych rozwizania zada stopnia niszego ocenione zostan najwyej. Zawodnicy zakwalikowani do zawodw III stopnia otrzymuj tytu nalisty Olimpiady Informatycznej. (11) Zawody II stopnia s przeprowadzane przez komitety okrgowe Olimpiady. Pierwsze sprawdzenie rozwiza jest dokonywane bezporednio po zawodach przez znajdujc si na miejscu cz Jury. Ostateczn ocen prac ustala Jury w penym skadzie po powtrnym sprawdzeniu prac. (12) Zawody II i III stopnia polegaj na samodzielnym rozwizywaniu zada. Zawody te odbywaj si w cigu dwch sesji, przeprowadzanych w rnych dniach, w warunkach kontrolowanej samodzielnoci. (13) Prace zespoowe, niesamodzielne lub nieczytelne nie bd brane pod uwag.

4 KOMITET GWNY OLIMPIADY INFORMATYCZNEJ


(1) Komitet Gwny Olimpiady Informatycznej, zwany dalej Komitetem, powoywany przez organizatora na kadencj trzyletni, jest odpowiedzialny za poziom

Regulamin Olimpiady Informatycznej


merytoryczny i organizacj zawodw. Komitet skada corocznie organizatorowi sprawozdanie z przeprowadzonych zawodw. (2) Czonkami Komitetu mog by pracownicy naukowi, nauczyciele i pracownicy owiaty zwizani z ksztaceniem informatycznym. (3) Komitet wybiera ze swego grona Prezydium, ktre podejmuje decyzje w nagych sprawach pomidzy posiedzeniami Komitetu. W skad Prezydium wchodz w szczeglnoci: przewodniczcy, dwch wiceprzewodniczcych, sekretarz naukowy, kierownik Jury i kierownik organizacyjny. (4) Komitet moe w czasie swojej kadencji dokonywa zmian w swoim skadzie. (5) Komitet powouje i rozwizuje komitety okrgowe Olimpiady. (6) Komitet: (a) opracowuje szczegowe Zasady organizacji zawodw, ktre s ogaszane razem z treci zada zawodw I stopnia Olimpiady, (b) powouje i odwouje czonkw Jury Olimpiady, ktre jest odpowiedzialne za sprawdzenie zada, (c) udziela wyjanie w sprawach dotyczcych Olimpiady, (d) ustala listy laureatw i uczestnikw wyrnionych oraz kolejno lokat, (e) przyznaje uprawnienia i nagrody rzeczowe wyrniajcym si uczestnikom Olimpiady, (f) ustala kryteria wyaniania uczestnikw uprawnionych do startu w Midzynarodowej Olimpiadzie Informatycznej, Olimpiadzie Informatycznej Centralnej Europy i innych midzynarodowych zawodach informatycznych i publikuje je w Zasadach organizacji zawodw oraz ustala ostateczn list reprezentacji. (7) Decyzje Komitetu zapadaj zwyk wikszoci gosw uprawnionych przy obecnoci przynajmniej poowy czonkw Komitetu Gwnego. W przypadku rwnej liczby gosw decyduje gos przewodniczcego obrad. (8) Posiedzenia Komitetu, na ktrych ustala si tre zada Olimpiady s tajne. Przewodniczcy obrad moe zarzdzi tajno obrad take w innych uzasadnionych przypadkach. (9) Decyzje Komitetu we wszystkich sprawach dotyczcych przebiegu i wynikw zawodw s ostateczne. (10) Komitet dysponuje funduszem Olimpiady za porednictwem kierownika organizacyjnego Olimpiady. (11) Komitet zatwierdza plan nansowy i sprawozdanie nansowe dla kadej edycji Olimpiady na pierwszym posiedzeniu Komitetu w nowym roku szkolnym. (12) Komitet ma siedzib w Warszawie w Orodku Edukacji Informatycznej i Zastosowa Komputerw w Warszawie. Orodek wspiera Komitet we wszystkich dziaaniach organizacyjnych zgodnie z Deklaracj przekazan organizatorowi.

27

28

Regulamin Olimpiady Informatycznej


(13) Pracami Komitetu kieruje przewodniczcy, a w jego zastpstwie lub z jego upowanienia jeden z wiceprzewodniczcych. (14) Przewodniczcy: (a) czuwa nad caoksztatem prac Komitetu, (b) zwouje posiedzenia Komitetu, (c) przewodniczy tym posiedzeniom, (d) reprezentuje Komitet na zewntrz, (e) czuwa nad prawidowoci wydatkw zwizanych z organizacj i przeprowadzeniem Olimpiady oraz zgodnoci dziaalnoci Komitetu z przepisami. (15) Komitet prowadzi archiwum akt Olimpiady przechowujc w nim midzy innymi: (a) zadania Olimpiady, (b) rozwizania zada Olimpiady przez okres 2 lat, (c) rejestr wydanych zawiadcze i dyplomw laureatw, (d) listy laureatw i ich nauczycieli, (e) dokumentacj statystyczn i nansow. (16) W jawnych posiedzeniach Komitetu mog bra udzia przedstawiciele organizacji wspierajcych jako obserwatorzy z gosem doradczym.

5 KOMITETY OKRGOWE
(1) Komitet okrgowy skada si z przewodniczcego, jego zastpcy, sekretarza i co najmniej dwch czonkw. (2) Kadencja komitetu wygasa wraz z kadencj Komitetu Gwnego. (3) Zmiany w skadzie komitetu okrgowego s dokonywane przez Komitet Gwny. (4) Zadaniem komitetw okrgowych jest organizacja zawodw II stopnia oraz popularyzacja Olimpiady. (5) Przewodniczcy (albo jego zastpca) oraz sekretarz komitetu okrgowego mog uczestniczy w obradach Komitetu Gwnego z prawem gosu.

6 PRZEBIEG OLIMPIADY
(1) Komitet Gwny rozsya do modzieowych szk rednich oraz kuratoriw owiaty i koordynatorw edukacji informatycznej tre zada I stopnia wraz z Zasadami organizacji zawodw. (2) W czasie rozwizywania zada w zawodach II i III stopnia kady uczestnik ma do swojej dyspozycji komputer zgodny ze standardem IBM PC.

Regulamin Olimpiady Informatycznej


(3) Rozwizywanie zada Olimpiady w zawodach II i III stopnia jest poprzedzone jednodniowymi sesjami prbnymi umoliwiajcymi zapoznanie si uczestnikw z warunkami organizacyjnymi i technicznymi Olimpiady. (4) Komitet Gwny zawiadamia uczestnika oraz dyrektora jego szkoy o zakwalikowaniu do zawodw stopnia II i III, podajc jednoczenie miejsce i termin zawodw. (5) Uczniowie powoani do udziau w zawodach II i III stopnia s zwolnieni z zaj szkolnych na czas niezbdny do udziau w zawodach, a take otrzymuj bezpatne zakwaterowanie i wyywienie oraz zwrot kosztw przejazdu.

29

7 UPRAWNIENIA I NAGRODY
(1) Uczestnicy zawodw II stopnia, ktrych wyniki zostay uznane przez Komitet Gwny Olimpiady za wyrniajce, otrzymuj na podstawie zawiadczenia wydanego przez Komitet, najwysz ocen z informatyki na zakoczenie nauki w klasie, do ktrej uczszczaj. (2) Uczestnicy Olimpiady, ktrzy zostali zakwalikowani do zawodw III stopnia s zwolnieni z egzaminu z przygotowania zawodowego z przedmiotu informatyka oraz (zgodnie z zarzdzeniem nr 35 Ministra Edukacji Narodowej z dnia 30 listopada 1991 r.) z czci ustnej egzaminu dojrzaoci z przedmiotu informatyka, jeeli w klasie, do ktrej uczszcza zawodnik by realizowany rozszerzony, indywidualnie zatwierdzony przez MEN program nauczania tego przedmiotu. (3) Laureaci zawodw III stopnia, a take nalici s zwolnieni w czci lub w caoci z egzaminw wstpnych do tych szk wyszych, ktrych senaty podjy odpowiednie uchway zgodnie z przepisami ustawy z dnia 12 wrzenia 1990 r. o szkolnictwie wyszym (Dz. U. nr 65 poz. 385). (4) Zawiadczenia o uzyskanych uprawnieniach wydaje uczestnikom Komitet Gwny. Zawiadczenia podpisuje przewodniczcy Komitetu. Komitet prowadzi rejestr wydanych zawiadcze. (5) Uczestnicy zawodw stopnia II i III otrzymuj nagrody rzeczowe. (6) Nauczyciel (opiekun naukowy), ktrego praca przy przygotowaniu uczestnika Olimpiady zostanie oceniona przez Komitet Gwny jako wyrniajca otrzymuje nagrod wypacan z budetu Olimpiady. (7) Komitet Gwny Olimpiady przyznaje wyrniajcym si aktywnoci czonkom Komitetu Gwnego i komitetw okrgowych nagrody pienine z funduszu Olimpiady. (8) Osobom, ktre wniosy szczeglnie duy wkad w rozwj Olimpiady Informatycznej Komitet Gwny moe przyzna honorowy tytu: Zasuony dla Olimpiady Informatycznej.

30

Regulamin Olimpiady Informatycznej 8 FINANSOWANIE OLIMPIADY


(1) Komitet Gwny bdzie si ubiega o pozyskanie rodkw nansowych z budetu pastwa, skadajc wniosek w tej sprawie do Ministra Edukacji Narodowej i przedstawiajc przewidywany plan nansowy organizacji Olimpiady na dany rok. Komitet bdzie take zabiega o pozyskanie dotacji z innych organizacji wspierajcych.

9 PRZEPISY KOCOWE
(1) Koordynatorzy edukacji informatycznej i dyrektorzy szk maj obowizek dopilnowania, aby wszystkie wytyczne oraz informacje dotyczce Olimpiady zostay podane do wiadomoci uczniw. (2) Wyniki zawodw I stopnia Olimpiady s tajne do czasu ustalenia listy uczestnikw zawodw II stopnia. Wyniki zawodw II stopnia s tajne do czasu ustalenia listy uczestnikw zawodw III stopnia Olimpiady. (3) Komitet Gwny zatwierdza sprawozdanie z przeprowadzonej Olimpiady w cigu dwch miesicy po jej zakoczeniu i przedstawia je organizatorowi i Ministerstwu Edukacji Narodowej. (4) Niniejszy regulamin moe by zmieniony przez Komitet Gwny tylko przed rozpoczciem kolejnej edycji zawodw Olimpiady po zatwierdzeniu zmian przez organizatora i uzyskaniu aprobaty Ministerstwa Edukacji Narodowej.

Warszawa, 17 wrzenia 1999 roku

Komitet Gwny Olimpiady Informatycznej

Zasady organizacji zawodw w roku szkolnym 1999/2000


Podstawowym aktem prawnym dotyczcym Olimpiady jest Regulamin Olimpiady Informatycznej, ktrego peny tekst znajduje si w kuratoriach. Ponisze zasady s uzupenieniem tego Regulaminu, zawierajcym szczegowe postanowienia Komitetu Gwnego Olimpiady Informatycznej o jej organizacji w roku szkolnym 1999/2000.

1 WSTP
Olimpiada Informatyczna jest olimpiad przedmiotow powoan przez Instytut Informatyki Uniwersytetu Wrocawskiego, ktry jest organizatorem Olimpiady, zgodnie z zarzdzeniem nr 28 Ministra Edukacji Narodowej z dnia 14 wrzenia 1992 roku (Dz. Urz. MEN nr 7 z 1992 r. poz. 31) z pniejszymi zmianami (zarzdzenie Ministra Edukacji Narodowej nr 19 z dnia 20 padziernika 1994 r., Dz. Urz. MEN nr 5 z 1994 r. poz. 27).

2 ORGANIZACJA OLIMPIADY
(1) Olimpiad przeprowadza Komitet Gwny Olimpiady Informatycznej. (2) Olimpiada Informatyczna jest trjstopniowa. (3) Olimpiada Informatyczna jest przeznaczona dla uczniw wszystkich typw szk rednich dla modziey (z wyjtkiem szk policealnych). W Olimpiadzie mog rwnie uczestniczy za zgod Komitetu Gwnego uczniowie szk podstawowych i gimnazjw. (4) Integraln czci rozwizania kadego z zada zawodw I, II i III stopnia jest program napisany w jednym z nastpujcych jzykw programowania: Pascal, C lub C++. (5) Zawody I stopnia maj charakter otwarty i polegaj na samodzielnym i indywidualnym rozwizywaniu zada i nadesaniu rozwiza w podanym terminie. (6) Zawody II i III stopnia polegaj na samodzielnym rozwizywaniu zada. Zawody te odbywaj si w cigu dwch sesji, przeprowadzanych w rnych dniach w warunkach kontrolowanej samodzielnoci.

32

Zasady organizacji zawodw


(7) Do zawodw II stopnia zostanie zakwalikowanych 160 uczestnikw, ktrych rozwizania zada I stopnia zostan ocenione najwyej; do zawodw III stopnia 40 uczestnikw, ktrych rozwizania zada II stopnia zostan ocenione najwyej. Komitet Gwny moe zmieni podane liczby zakwalikowanych uczestnikw co najwyej o 15%. (8) Podjte przez Komitet Gwny decyzje o zakwalikowaniu uczestnikw do zawodw kolejnego stopnia, przyznanych miejscach i nagrodach oraz skadzie polskiej reprezentacji na Midzynarodow Olimpiad Informatyczn i inne midzynarodowe zawody informatyczne s ostateczne. (9) Terminarz zawodw: zawody I stopnia 18.10.199915.11.1999 ogoszenie wynikw: 20.12.1999 zawody II stopnia 8.02.200010.02.2000 ogoszenie wynikw: 6.03.2000 zawody III stopnia 11.04.200015.04.2000

3 WYMAGANIA DOTYCZCE ROZWIZA ZADA ZAWODW I STOPNIA


(1) Zawody I stopnia polegaj na samodzielnym i indywidualnym rozwizywaniu zada eliminacyjnych (niekoniecznie wszystkich) i nadesaniu rozwiza poczt, przesyk polecon, pod adres: Olimpiada Informatyczna Orodek Edukacji Informatycznej i Zastosowa Komputerw ul. Raszyska 8/10, 02026 Warszawa tel. (022) 8224019, (022) 6685533 w nieprzekraczalnym terminie nadania do 15 listopada 1999 r. (decyduje data stempla pocztowego). Prosimy o zachowanie dowodu nadania przesyki. Rozwizania dostarczane w inny sposb nie bd przyjmowane. (2) Prace niesamodzielne lub zbiorowe nie bd brane pod uwag. (3) Rozwizanie kadego zadania skada si z: (a) programu (tylko jednego) na dyskietce w postaci rdowej i skompilowanej, (b) opisu algorytmu rozwizania zadania z uzasadnieniem jego poprawnoci. (4) Uczestnik przysya jedn dyskietk, oznaczon jego imieniem i nazwiskiem, nadajc si do odczytania na komputerze IBM PC i zawierajc: spis zawartoci dyskietki w pliku nazwanym SPIS.TRC, programy w postaci rdowej i skompilowanej do wszystkich rozwizanych zada.

Zasady organizacji zawodw


Zaleca si kompilowanie do trybu rzeczywistego MS-DOS. Imi i nazwisko uczestnika musi by podane w komentarzu na pocztku kadego programu. (5) Wszystkie nadsyane teksty powinny by drukowane (lub czytelnie pisane) na kartkach formatu A4. Kada kartka powinna mie kolejny numer i by opatrzona penym imieniem i nazwiskiem autora. Na pierwszej stronie nadsyanej pracy kady uczestnik Olimpiady podaje nastpujce dane: imi i nazwisko, dat i miejsce urodzenia, dokadny adres zamieszkania i ewentualnie numer telefonu, nazw, adres, wojewdztwo i numer telefonu szkoy oraz klas, do ktrej uczszcza, nazw i numer wersji uytego jzyka programowania, opis konguracji komputera, na ktrym rozwiza zadania. (6) Nazwy plikw z programami w postaci rdowej powinny mie jako rozszerzenie co najwyej trzyliterowy skrt nazwy uytego jzyka programowania, to jest: Pascal C C++ PAS C CPP

33

(7) Opcje kompilatora powinny by czci tekstu programu. Zaleca si stosowanie opcji standardowych.

4 UPRAWNIENIA I NAGRODY
(1) Uczestnicy zawodw II stopnia, ktrych wyniki zostay uznane przez Komitet Gwny Olimpiady za wyrniajce, otrzymuj najwysz ocen z informatyki na zakoczenie nauki w klasie, do ktrej uczszczaj (2) Uczestnicy Olimpiady, ktrzy zostali zakwalikowani do zawodw III stopnia, s zwolnieni z egzaminu dojrzaoci (zgodnie z zarzdzeniem nr 29 Ministra Edukacji Narodowej z dnia 30 listopada 1991 r.) lub z egzaminu z przygotowania zawodowego z przedmiotu informatyka. Zwolnienie jest rwnoznaczne z wystawieniem oceny najwyszej. (3) Laureaci i nalici Olimpiady s zwolnieni w czci lub w caoci z egzaminw wstpnych do tych szk wyszych, ktrych senaty podjy odpowiednie uchway zgodnie z przepisami ustawy z dnia 12 wrzenia 1990 roku o szkolnictwie wyszym (Dz. U. nr 65, poz. 385). (4) Zawiadczenia o uzyskanych uprawnieniach wydaje uczestnikom Komitet Gwny.

34

Zasady organizacji zawodw


(5) Komitet Gwny ustala skad reprezentacji Polski na XII Midzynarodow Olimpiad Informatyczn w 2000 roku na podstawie wynikw zawodw III stopnia i regulaminu tej Olimpiady Midzynarodowej. Szczegowe zasady zostan podane po otrzymaniu formalnego zaproszenia na XII Midzynarodow Olimpiad Informatyczn. (6) Nauczyciel (opiekun naukowy), ktry przygotowa laureata Olimpiady Informatycznej, otrzymuje nagrod przyznawan przez Komitet Gwny Olimpiady. (7) Komitet Gwny moe przyznawa nalistom i laureatom nagrody, a take stypendia ufundowane przez osoby prawne lub zyczne.

5 PRZEPISY KOCOWE
(1) Koordynatorzy edukacji informatycznej i dyrektorzy szk maj obowizek dopilnowania, aby wszystkie informacje dotyczce Olimpiady zostay podane do wiadomoci uczniw. (2) Komitet Gwny Olimpiady Informatycznej zawiadamia wszystkich uczestnikw zawodw I i II stopnia o ich wynikach. Kady uczestnik, ktry przeszed do zawodw wyszego stopnia oraz dyrektor jego szkoy otrzymuj informacj o miejscu i terminie nastpnych zawodw. (3) Uczniowie zakwalikowani do udziau w zawodach II i III stopnia s zwolnieni z zaj szkolnych na czas niezbdny do udziau w zawodach, a take otrzymuj bezpatne zakwaterowanie i wyywienie oraz zwrot kosztw przejazdu. Strona Olimpiady: www.oi.pjwstk.waw.pl oraz www.mimuw.edu.pl/oi UWAGA: W materiaach rozsyanych do szk, po Zasadach organizacji zawodw zostay zamieszczone treci zada zawodw I stopnia, a po nich nastpujce Wskazwki dla uczestnikw: (1) Przeczytaj uwanie nie tylko teksty zada, ale i tre Zasad organizacji zawodw. (2) Przestrzegaj dokadnie warunkw okrelonych w zadaniu, w szczeglnoci wszystkich regu dotyczcych nazw plikw. (3) Twj program powinien czyta dane z pliku i zapisywa wyniki do pliku. Nazwy tych plikw powinny by takie, jak podano w treci zadania. (4) Dane testowe s zawsze zapisywane bezbdnie, zgodnie z warunkami zadania i podan specykacj wejcia. Twj program nie musi tego sprawdza. (5) Nie przyjmuj adnych zaoe, ktre nie wynikaj z treci zadania.

Zasady organizacji zawodw


(6) Staraj si dobra tak metod rozwizania zadania, ktra jest nie tylko poprawna, ale daje wyniki w jak najkrtszym czasie. (7) Ocena za rozwizanie zadania jest okrelona na podstawie wynikw testowania programu i uwzgldnia poprawno oraz efektywno metody rozwizania uytej w programie. W szczeglnoci programy poprawne, lecz dziaajce zbyt dugo zwaszcza dla duych rozmiarw danych mog zosta ocenione nisko.

35

Komitet Gwny Olimpiady Informatycznej

Informacja o XI Midzynarodowej Olimpiadzie Informatycznej IOI99, Antayla-Belek Turcja, padziernik 1999

PRZEBIEG I ORGANIZACJA
XI Midzynarodowa Olimpiada Informatyczna odbya si w dniach 916 padzienika 1999 r., w rdziemnomorskim kurorcie Belek koo miasta Antalya w Turcji. Wzio w niej udzia 257 uczniw reprezentujcych 65 krajw z caego wiata. Polsk reprezentowali: Andrzej Gsienica-Samek, Marcin Meinardi, Micha Nowakiewicz i Krzysztof Onak. W dwch sesjach zawodnicy rozwizywali 2 razy po trzy zadania. Byy to jedne z najtrudniejszych zestaww zada, jakie zdarzyy si na olimpiadach midzynarodowych. Zawodnicy mogli zdoby maksymalnie 600 punktw, natomiast rednia liczba zdobytych punktw wyniosa 135. Polacy w tej trudnej konkurencji spisali si znakomicie. Andrzej Gsienica-Samek zdoby medal zoty (trzeci w karierze) za 370 punktw, Marcin Meinardi i Micha Nowakiewicz zdobyli medale srebrne za, odpowiednio, 294 i 240 punktw, za Krzysztof Onak zdoby medal brzowy za 210 punktw. Najwiksz liczb punktw uzyska Hong Chen z Chin 480. Drugie miejsce zajli Mathijs Vogelzang z Holandii i Roman Pastoukhov z Rosji obaj po 457 punktw. Naley jeszcze wspomnie, e Tomasz Czajka, ktry podczas tych zawodw reprezentowa Wielk Brytani, zdoby take medal zoty z wynikiem 350 punktw. Na kocowych stronach tej ksieczki przedstawiamy zadania z XI Midzynarodowej Olimpiady Informatycznej. Zainteresowanych wiksza liczb szczegw na temat tej olimpiady odsyamy do strony internetowej: http://www.ioi99.org.tr/

Zawody I stopnia
opracowania zada

Wojciech Guzicki
autor zadania, opracowanie

Tomasz Wale
program wzorcowy

Gdzie zbudowa browar?


Mieszkacy bajtockiej wyspy Abstynencja bardzo lubi piwo bezalkoholowe. Do tej pory piwo bezalkoholowe sprowadzano z Polski, ale w tym roku w jednym z miast na Abstynencji zostanie wybudowany browar. Wszystkie miasta wyspy le na wybrzeu i s poczone autostrad obiegajc wysp wzdu brzegu. Inwestor budujcy browar zebra informacje o zapotrzebowaniu na piwo, tj. ile cystern piwa trzeba codziennie dostarczy do kadego z miast. Dysponuje take zestawieniem odlegoci pomidzy miastami. Koszt transportu jednej cysterny na odlego 1 km wynosi 1 talar. Dzienny koszt transportu to suma, jak trzeba wyoy, by do kadego miasta przetransportowa z browaru tyle cystern, ile wynosi zapotrzebowanie w danym miecie. Jego wielko zaley od miejsca pooenia browaru. Inwestor chce zminimalizowa koszty transportu piwa.

Zadanie
Napisz program, ktry: wczyta z pliku tekstowego BRO.IN liczb miast, odlegoci midzy nimi oraz dzienne zapotrzebowania na piwo, obliczy minimalny dzienny koszt transportu piwa, zapisze wynik w pliku tekstowym BRO.OUT.

Wejcie
W pierwszym wierszu pliku tekstowego BRO.IN jest zapisana jedna liczba cakowita n rwna liczbie miast, 5 n 10 000 . W kadym z kolejnych n wierszy zapisana jest para nieujemnych liczb cakowitych oddzielonych pojedynczym odstpem. Liczby zi , di zapisane w ( i+1)-ym wierszu, to, odpowiednio, zapotrzebowanie na piwo w miecie nr i oraz odlego (w kilometrach) od miasta nr i do nastpnego miasta na autostradzie. Kolejne miasta na autostradzie maj kolejne numery, po miecie nr n ley miasto nr 1. Cakowita dugo autostrady nie przekracza 1 000 000 km. Zapotrzebowanie na piwo w adnym miecie nie przekracza 1 000 cystern.

Wyjcie
Twj program powinien zapisa w pierwszym i jedynym wierszu pliku tekstowego BRO.OUT, dokadnie jedn liczb cakowit rwn minimalnemu dziennemu kosztowi transportu piwa.

Przykad
Dla pliku wejciowego BRO.IN: 6

42

Gdzie zbudowa browar?


1 2 2 3 1 2 5 2 1 10 2 3 poprawn odpowiedzi jest plik tekstowy BRO.OUT: 41

ROZWIZANIE
Oczywiste rozwizanie polega na obliczeniu kosztu transportu z kadego miasta do kadego innego i dodaniu otrzymanych liczb. Dla kadego miasta naley obliczy w tym celu n 1 odlegoci, co powoduje, e zoono tego algorytmu wynosi O(n2 ). Istnieje algorytm szybszy, dziaajcy w czasie O(n). Warto zauway, e jeli miasta s poczone sieci drg bdc drzewem, to waciwa lokalizacja browaru nie zaley od odlegoci midzy miastami, ale tylko od zapotrzebowa w miastach. Oczywicie czny koszt transportu zaley od odlegoci. Przypadek, gdy graf drg jest drzewem (zreszt bardzo prostym), by ju tematem jednego z zada olimpijskich (Mudstok Bis, II Olimpiada Informatyczna, zobacz [2]). Jeli graf drg zawiera cykle, odpowied jest znacznie bardziej skomplikowana. Dla jednego cyklu istnieje algorytm liniowy, przy czym nie tylko czny koszt, ale i lokalizacja browaru zaley teraz rwnie od odlegoci. Trudno polega na tym, e w drzewie istnieje tylko jedna droga prowadzca z danego miasta do kadego innego, natomiast w przypadku miast pooonych na okrgu zawsze s dwie drogi: mona obiega okrg w kierunku zgodnym z ruchem wskazwek zegara lub w kierunku przeciwnym. W przypadku kadej pary miast musimy zdecydowa, ktry kierunek jest bardziej opacalny. Przyjmijmy dla ustalenia uwagi, e miasta s numerowane w kierunku zgodnym z ruchem wskazwek zegara. Wczytane dane umieszczamy w dwch tablicach: z[i] jest zapotrzebowaniem na piwo w miecie i, d[i] jest odlegoci od miasta i do nastpnego. W algorytmie optymalnym najpierw obliczamy koszt transportu z miasta o numerze 1 (w programie wzorcowym dla wygody rozpoczto numeracj miast od zera; atwiej wtedy obliczy numer nastpnego i poprzedniego miasta na okrgu za pomoc funkcji mod). Jednoczenie obliczamy kilka wielkoci pomocniczych: indeks l najdalszego miasta, do ktrego dowozimy piwo kierujc si w lewo, tzn. przeciwnie do ruchu wskazwek zegara; indeks r najdalszego miasta, do ktrego dowozimy piwo kierujc si w prawo, tzn. zgodnie z ruchem wskazwek zegara; czne zapotrzebowanie zl na piwo w miastach, do ktrych je dowozimy jadc w lewo; czne zapotrzebowanie zr na piwo w miastach, do ktrych je dowozimy jadc w prawo;

Gdzie zbudowa browar?


odlego dl z pierwszego miasta do miasta o numerze l, gdy jedziemy w lewo; odlego dr z pierwszego miasta do miasta o numerze r, gdy jedziemy w prawo; czny koszt transportu c ten koszt zapamitujemy jako dotychczas minimalny. W kolejnych krokach algorytmu koszt transportu piwa z nastpnych miast bdzie obliczany jako korekta obliczonego poprzednio kosztu. Przypumy, e mamy obliczone te wszystkie dane dla miasta o numerze i 1. Wtedy dla miasta o numerze i dokonujemy prostej korekty. Najpierw znajdujemy odlego d midzy miastami o numerach i 1 oraz i. Nastpnie obliczamy, o ile zmieni si czny koszt transportu piwa, jeli bdziemy je dowozi z miasta i po tych samych drogach: a wic do kosztu dodajemy (zl + z[i 1]) d i odejmujemy zr d. Mianowicie wszystkie cysterny wysyane w lewo przejad odlego o d wiksz i dojd nowe cysterny, ktre musz dojecha do miasta o numerze i 1, a wszystkie cysterny jadce w prawo (w tym rwnie te, ktre jechay do miasta i) przejad o d mniej. Modykujemy rwnie zl (dodajc z[i 1]), zr (odejmujc z[i]), dl (dodajc d) i dr (odejmujc d). Teraz poprawiamy czny koszt, zwikszajc liczb cystern wysyanych w prawo i zmniejszajc liczb cystern wysyanych w lewo. Patrzymy na odlego d[r] midzy miastem r i nastpnym lecym na prawo (czyli zgodnie z ruchem wskazwek zegara) miastem l. Jeli dl > dr + d[r], to do miasta o numerze l opaca si teraz jecha w prawo. A wic dokonujemy kolejnej korekty: zwikszamy dr o d[r] i zr o z[r + 1], zmniejszamy dl o d[l] i zl o z[l], zwikszamy o 1 numery miast r i l (pamitajc, e za n + 1 bierzemy 1) i wreszcie odpowiednio modykujemy czny koszt transportu. Teraz znw sprawdzamy, czy w podobny sposb nie przesun granicy midzy kierunkami w lewo i w prawo do nastpnego miasta. Postpujemy tak dotd, a dalsze zmiany nie przynios korzyci. W ten sposb zakoczylimy korekty i mamy obliczony czny koszt transportu piwa z miasta o numerze i. Porwnujemy go z dotychczasowym minimalnym zapamitujc, jeli jest mniejszy, i przechodzimy do kolejnego miasta. Jaka bdzie zoono obliczeniowa tego algorytmu? Dla kadego miasta i dokonywalimy najpierw pewnej ustalonej liczby zmian, a nastpnie w ptli dokonywalimy by moe wielu korekt. Zauwamy jednak, e kada z tych korekt dotyczya zawsze nowej granicy midzy kierunkiem lewym i prawym, przy czym ta granica przesuwaa si zawsze tylko w prawo. Zatem cznie dokonalimy tylko n takich korekt. Std wynika, e czas dziaania tego algorytmu bdzie proporcjonalny do n. Dla liczby n = 10000 rnica w czasie dziaania obu algorytmw (pierwszego o zoonoci O(n2 ) i drugiego o zoonoci O(n)) jest znaczna i due testy pozwalay na odrzucenie programw dziaajcych w czasie (n2 ). czny koszt transportu mg te przekroczy zakres liczb typu longint i niektre testy wykryway ten bd.

43

TESTY
Do sprawdzania rozwiza zawodnikw uyto 17 testw. Testy 1 i 2, 3 i 4, 5 i 6, 14 i 15 byy grupowane.

44

Gdzie zbudowa browar?


BRO0.IN przykadowy test z treci zadania, BRO1.IN n = 10, may test poprawnociowy, BRO2.IN n = 15, may test poprawnociowy, BRO3.IN n = 20, test sprawdzajcy bd przekroczenia zakresu, BRO4.IN n = 20, pary maj posta (i,i), BRO5.IN n = 30, may test poprawnociowy, BRO6.IN n = 40, may test poprawnociowy, BRO7.IN n = 500, na przemian pary (1,1), (100,1), BRO8.IN n = 1000, na przemian pary (1,1), (100,1000), BRO9.IN n = 3000, trzy grupy zawierajce po 1000 miast oddalone o 300000 km, BRO10.IN n = 4000, pary postaci ((i+1001) mod 1000, 100), BRO11.IN n = 5000, pary postaci (|3000 i| mod 1000, 100+(i mod 100)), BRO12.IN n = 7000, pary maj posta ((i+1000) mod 1000, 100), BRO13.IN n = 7500, dane losowe, BRO14.IN duy prosty test dla n = 10000, wszystkie pary maj posta (1,1), BRO15.IN may test poprawnociowy dla n = 20, BRO16.IN n = 10000, dane losowe.

Wojciech Rytter
autor zadania, opracowanie

Piotr Sankowski
program wzorcowy

Wirusy
Komisja Badania Wirusw Binarnych wykrya, e pewne cigi zer i jedynek s kodami wirusw. Komisja wyodrbnia zbir wszystkich kodw wirusw. Cig zer i jedynek nazywamy bezpiecznym, gdy aden jego segment (tj. cig kolejnych wyrazw) nie jest kodem wirusa. Komisja dy do ustalenia, czy istnieje nieskoczony, bezpieczny cig zer i jedynek.

Przykad
Dla zbioru kodw {011 , 11 , 00000 } nieskoczonym, bezpiecznym cigiem jest 010101 . . .. Dla zbioru kodw {01 , 11 , 00000 } nie istnieje nieskoczony, bezpieczny cig zer i jedynek.

Zadanie
Napisz program, ktry: wczyta kody wirusw z pliku tekstowego WIR.IN, stwierdzi, czy istnieje nieskoczony, bezpieczny cig zer i jedynek, zapisze wynik do pliku tekstowego WIR.OUT.

Wejcie
W pierwszym wierszu pliku wejciowego WIR.IN znajduje si jedna liczba cakowita n bdca liczb wszystkich kodw wirusw. W kadym z kolejnych n wierszy znajduje si jedno niepuste sowo zoone ze znakw 0 i 1 kod wirusa. Sumaryczna dugo wszystkich sw nie przekracza 30000.

Wyjcie
W pierwszym i jedynym wierszu pliku wyjciowego WIR.OUT powinno znajdowa si sowo: TAK jeeli istnieje nieskoczony, bezpieczny cig zer i jedynek, NIE w przeciwnym przypadku.

Przykad
Dla pliku wejciowego WIR.IN: 3 01 11 00000

46

Wirusy
poprawn odpowiedzi jest plik tekstowy WIR.OUT: NIE

ROZWIZANIE
Algorytm teorio-grafowy W rozwizaniu zadania najwaniejsz rol odgrywaj suksy i preksy wirusw. Jeli sowo mona zapisa jako zoenie trzech sw = u v w, to u nazywamy preksem, a w suksem . Na przykad preksami sowa rytter s { , r, ry, ryt, rytt, rytte, rytter}, a suksami { , r, er, ter, tter, ytter, rytter}, gdzie oznacza sowo puste o dugoci zero. Dla sowa i zbioru sw-wirusw W , przez max pref () oznaczmy najduszy suks , ktry jest jednoczenie preksem pewnego wirusa z W . Jeli chcemy sprawdzi, czy dany cig binarny nie zawiera wirusa, to wystarczy przeglda ten cig znak po znaku i pamita jedynie ostatni istotny fragment. Tym istotnym fragmentem jest maksymalny preks wirusa, zatem po wczytaniu cigu a1 a2 a3 . . . ak pamitamy max pref (a1 a2 a3 . . . ak ). Sowo a1 a2 a3 . . . an jest bezpieczne, gdy kady z porednich istotnych fragmentw jest bezpieczny, tzn. gdy max pref (a1 ), max pref (a1 a2 ), max pref (a1 a2 a3 ), . . . , max pref (a1 a2 a3 . . . an ) s bezpieczne (nie s wirusami). Motywuje to wprowadzenie pomocniczego grafu G, ktrego cieki odpowiadaj dokadnie wszystkim moliwym bezpiecznym sowom i ktrego wzami s wszystkie bezpieczne preksy wirusw. Od wza x prowadzimy skierowan krawd do y, gdy dla pewnej litery a (gdzie a = 0 lub a = 1) po dopisaniu jej do x otrzymamy sowo takie, e maksymalnym jego suksem, ktry jest preksem pewnego wirusa, jest y. Oznaczmy y przez ((x, a)) . Mona to zapisa bardziej formalnie: (x, a) = max pref (xa), gdy xa jest bezpieczny, (x, a) = NIL, gdy xa nie jest bezpieczny (NIL oznacza brak krawdzi). Rysunek 2 przedstawia graf G dla przykadowego zbioru wirusw W = {000, 0110, 100101, 1010, 111}. Grafy tego typu odpowiadaj w teorii oblicze tzw. automatom skoczonym. Zbir W jest bezpieczny wtedy i tylko wtedy, gdy w grae G istnieje cykl skierowany osigalny z wza startowego odpowiadajcego sowu pustemu. Kada cieka w tym grae zaczynajca si od wza startowego wyznacza cig bezpieczny.
Konstrukcja drzewa bezpiecznych preksw wirusw

Pierwszym krokiem w konstrukcji grafu G jest zbudowanie drzewa waciwych preksw wirusw, tzn. takich preksw sw ze zbioru W , ktre nie s rwne adnemu wirusowi. Drzewo dla przykadowego zbioru W jest przedstawione na rysunku 1.

Wirusy
Uwaga: Zamy pocztkowo, e aden wzorzec nie jest waciwym podsowem innego wzorca.
Rys. 1 Pocztkowa aproksymacja grafu G: drzewo T bezpiecznych preksw wirusw. Linie przerywane oznaczaj przejcia zabronione. Brakujce niezabronione przejcia s uzupenione w grae G.

47

0 0 1 0 3 0 7 0 1 4 1 0 8 1 10 0 11 1 0 5 1 9 0 1 2 1 6 1

Wierzchoki s ponumerowane, jednake kady wze utosamiamy z pewnym preksem wzorca. Zamy, e syn(x, a) oznacza wze xa, jeli xa jest bezpiecznym preksem wzorca. Jeli xa W , to syn(x, a) = N , gdzie N jest specjaln wartoci oznaczajc, e krawdzi etykietownej symbolem a z wza x nigdy by nie moe. W pozostaych przypadkach syn(x, a) = NIL.

Waciwa konstrukcja grafu G Algorytm korzysta istotnie z drzewa preksw T zbudowanego wczeniej i opisanego funkcj syn. Algorytm Inicjujemy ( , a) = , (, a) = N IL, dla a=0,1 i = (sowa odpowiadaj wzom w drzewie). Przechodzc drzewo T wszerz, dla kadego wza x = root wykonaj:
1: 2: 3: 4:

niech y oraz a bd takie, e x = syn(y, a); if (y, a) = N IL then begin temp := (y, a); (y, a) := x; for b:=0 to 1 do begin

48

Wirusy
5: 6: 7: 8: 9: 10: 11:

if syn(x, b)=N syn(temp,b)=N then (x, b):=NIL else if syn(temp, b) = N IL then (x, b):=syn(temp, b) else (x, b):=(temp, b) end end

Na zakoczenie algorytmu naley ograniczy graf G do jego podgrafu indukowanego przez wierzchoki osigalne z wierzchoka startowego. Uwaga: Zaoenie, e aden wirus nie jest podsowem innego wirusa byo uyteczne przy wprowadzeniu pomocniczego drzewa preksw. Algorytm konstrukcji grafu automatycznie wykrywa takie sytuacje, tak wic zaoenie to nie jest istotne.
Rys. 2 Graf G dla przykadowego zbioru wirusw. Pogrubione krawdzie (przejcia) s pozostaoci z drzewa preksw T , pozostae krawdzie powstay w wyniku dziaania algorytmu konstrukcji G.

0 0 1 0 3 1 1 4 1 7 0 0 0 8 1 10 0 11 1 0 5 1 9 0 1 1 2 1 6

Sprawdzanie acyklicznoci

Aby stwierdzi, czy w grae jest cykl naley sprawdzi, czy wierzchoki grafu mona posortowa topologicznie. Mona zastosowa dwie alternatywne metody: sortowanie topologiczne przy pomocy DFS, sortowanie topologiczne poprzez usuwanie wierzchokw ze stopniem wejciowym rwnym zero.

Wirusy
Nie opisujemy dokadnie tych metod poniewa sprawdzanie acyklicznoci grafu wystpio ju w wielu poprzednich zadaniach olimpijskich. Dla naszego przykadowego zbioru wirusw nieskoczona cieka idca po wzach grafu G. 0, 2, 5, (8, 10, 11) odpowiada nieskoczonemu bezpiecznemu sowu: 100(100)

49

Algorytm alternatywny Wprowadzamy dwie operacje na zbiorze W . Niech x, y W . Usuwanie y. Jeli x jest podsowem y, to y usuwamy z W . Skracanie y. Jeli y = za, gdzie a = 0 a = 1, oraz x = u i u jest suksem z, to a y:=z. Symbol a oznacza 1 a. Na przykad jeli x = 0010, y = 001010011, to skracajc y dostajemy y = 00101001. Operacj skracania moemy zastosowa dlatego, e jeli w pewnym nieskoczonym cigu wystpi skrcone y, to albo w tym cigu wystpi samo y, albo x. Niech W bdzie zbiorem powstaym z W za pomoc jednej z tych operacji, wtedy: W jest bezpieczny W jest bezpieczny. atwo zauway, e W jest niebezpieczny wtedy i tylko wtedy, gdy po pewnej liczbie operacji otrzymamy zbir zawierajcy oba pojedyncze symbole jako sowa. Natomiast, jeli w wyniku dowolnego cigu operacji otrzymamy zbir zawierajcy sowo o dugoci wikszej ni jeden, to W jest bezpieczny. Mona wwczas skonstruowa dowolnie dugi bezpieczny cig postpujc w nastpujcy sposb: zaczynamy od cigu pustego i dokadamy po jednym symbolu, do chwili gdy otrzymujemy cig niebezpieczny (gdy suks naley do w); zamieniamy ostatnio dodany symbol na przeciwny i kontynuujemy nasz konstrukcj. Nasz algorytm polega na stosowaniu w dowolnej kolejnoci jednej z powyszych operacji, a otrzymany zbir zawierajcy obie litery 0, 1, albo zbir zawierajcy dusze sowo, ktry to zbir nie da si dalej zmieni za pomoc jednej z naszych operacji. W pierwszym przypadku W jest niebezpieczny. Dla naszego przykadowego zbioru wirusw W z rysunku 1 od razu wida, e jest on bezpieczny, poniewa adna z dwch operacji si do niego nie stosuje.

50

Wirusy
Przykad

Rozwamy przykad zbioru, ktry nie jest bezpieczny. W poniszym cigu przeksztace podkrelamy sowo biorce udzia w przeksztaceniu, sowo to jest usuwane lub skracane o jeden symbol od koca. {000, 010, 11} {000, 01, 11} {00, 01, 11} {00, 0, 11} {0, 11} {0, 1}. Zatem {000, 010, 11} jest niebezpieczny, gdy kocowy zbir {0, 1} jest niebezpieczny.

TESTY
Do sprawdzania rozwiza zawodnikw uyto 10 testw: WIR1-3.IN mae testy poprawnociowe, WIR4.IN redni test poprawnociowy, WIR5.IN test wydajnociowy sprawdzajcy metod wyszukiwania cyklu, tylko bardzo dugie cykle, WIR6.IN may test wydajnociowy, jeden cykl w automacie, WIR7.IN duy test wydajnociowy, dua liczba moliwych nieskoczonych sw, WIR8.IN przypadek pesymistyczny dla iloczynu automatw, duo krtkich sw, WIR9.IN duy test wydajnociowy, maa liczba moliwych nieskoczonych sw, WIR10.IN redni test wydajnociowy, tylko jeden cykl w automacie.

Marcin Kubica
autor zadania, opracowanie

Marek Pawlicki
program wzorcowy

Narciarze
Druyna narciarska organizuje trening na Bajtogrze. Na pnocnym stoku gry znajduje si jeden wycig. Wszystkie trasy prowadz od grnej do dolnej stacji wycigu. W trakcie treningu czonkowie druyny bd razem startowa z grnej stacji wycigu i spotyka si przy dolnej stacji. Poza tymi dwoma punktami trasy, zawodnikw nie mog si przecina, ani styka. Wszystkie trasy musz cay czas prowadzi w d. Mapa tras narciarskich skada si z sieci polan poczonych przecinkami. Kada polana ley na innej wysokoci. Dwie polany mog by bezporednio poczone co najwyej jedn przecink. Zjedajc od grnej do dolnej stacji wycigu mona tak wybra drog, eby odwiedzi dowoln polan (cho by moe nie wszystkie w jednym zjedzie). Trasy narciarskie mog si przecina tylko na polanach i nie prowadz przez tunele, ani estakady.

Zadanie
Napisz program, ktry: wczyta z pliku tekstowego NAR.IN map tras narciarskich, wyznaczy maksymaln liczb zawodnikw, ktrzy mog bra udzia w treningu, zapisze wynik do pliku tekstowego NAR.OUT.

Wejcie
W pierwszym wierszu pliku wejciowego NAR.IN znajduje si jedna liczba cakowita n rwna liczbie polan, 2 n 5 000 . W kadym z kolejnych n 1 wierszy znajduje si cig liczb cakowitych pooddzielanych pojedynczymi odstpami. Liczby w ( i + 1)-szym wierszu pliku okrelaj, do ktrych polan prowadz w d przecinki od polany nr i. Pierwsza liczba k w wierszu okrela liczb tych polan, a kolejne k liczb to ich numery, ktre s uporzdkowane wg uoenia prowadzcych do nich przecinek w kierunku ze wschodu na zachd. Polany s ponumerowane liczbami od 1 do n. Grna stacja wycigu znajduje si na polanie numer 1, a dolna na polanie numer n.

Wyjcie
W pierwszym i jedynym wierszu pliku wyjciowego NAR.OUT powinna znajdowa si dokadnie jedna liczba cakowita maksymalna liczba narciarzy mogcych wzi udzia w treningu.

Przykad
Dla pliku wejciowego NAR.IN: 15 5 3 5 9 2 4

52

Narciarze
1 9 2 7 5 2 6 8 1 7 1 10 2 14 11 2 10 12 2 13 10 3 13 15 12 2 14 15 1 15 1 15 1 15 poprawn odpowiedzi jest plik tekstowy NAR.OUT: 3

ROZWIZANIE
Zadanie to moemy sformuowa w jzyku teorii grafw. Mamy dany acykliczny, planarny graf skierowany wierzchoki tego grafu to polany i stacje wycigu, a krawdzie to przecinki. W grae tym mamy wyrnione dwa wierzchoki reprezentujce grn i doln stacj wycigu. Z grnej stacji wycigu osigalne s wszystkie wierzchoki w grae. Podobnie, z kadego wierzchoka w grae osigalna jest dolna stacja wycigu. Ponadto stacje wycigu (jako najwyej i najniej pooone wierzchoki) znajduj si na obwodzie grafu. Naley wyznaczy maksymaln liczb k takich cieek w grae, ktre prowadz od grnej do dolnej stacji wycigu i poza stacjami wycigu nie maj (parami) adnych wsplnych wierzchokw. Zamy chwilowo, e w grae nie ma krawdzi czcej bezporednio grn i doln stacj wycigu. Jeeli taka krawd jest, to moemy j usun, obliczy wynik, po czym zwikszy go o 1. Zadanie to moemy rozwiza za pomoc algorytmu zachannego. Wyobramy sobie, e wybralimy k cieek speniajcych warunki zadania. Oznaczmy te cieki, od lewej do prawej (ze wschodu na zachd), przez s1 , . . . , sk . Zauwamy, e bez amania warunkw zadania moemy przesun skrajnie lew (wschodni) ciek s1 w lewo tak, aby prowadzia przez wierzchoki lece na lewym p-obwodzie grafu.
  0    !!!! ! ! 1 ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! 1 1 1 1 1 1 1 1 1 21 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ! ! ! ! ! ! !!! !! ! 111 11 1 1 !! ! ! ! ! ! ! ! ! ' ( ' & % % 1 1 1 1 1 1 1 1 11 1 11 1 ! ! ! ! ! ! !! ! 1 1111 1 ! !!! ! ! ! !! ! !! ! !! 11 1 11 ' % !!!!!! !! !!!!!! ! 11 1 1 11111 ' " !!!!! 111111 !!!!!! 1111 " 11111 111 !!! !! ! !! ' 11111 11 " 111111 11 !! ! ! ' !! !! ! !! ! 1 111 1 11 1 1 1 11 111 1 1 !!! !! !! ! ! !! !!!! % 1 1 1 1 1 11 1 1 # ! ! ! !! ! ! !!! ! ! ! ! % 1 11 1 1 1 111 1 1 ! !! 11 11 1 1 1 1 111 1 # !! !! !! ! ! ! ! 1% 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 )   #       !! ! ! ! ! ! ! ! !! !! ! ! ! ! ! ! ! ! ! ! ! ! ! !! ! ! ! $ ! ! !! !! !! ! ! ! ! !! !!! !! ! ! ! !!!!!! !!! ! ! !! ! ! ! !! !!! ! ' ( ' %& % ! !! !! ! ! !! ! ! ! ! ! ! ! !! ! ! !! ! ! ! ! ! !!!!! ! ! # !! ! ! ! !!! ' % # !! !!!! !! ! ! !! !!! ! ! !!!! ! !! ' " "# ! !!!!!!!! !!!!!!! !!!!!!!!! ! " " !!!!!!!!!!!! !!! !! ! !! ' !!!!!! " " !!!!!! ! ! !! ! ! ' !! !! ! !!! ! !!! ! !! ! ! ! !!!! ! !!!! !! ! ! ! !!! !! % ! ! !! ! !! ! ! # ! ! !! !! !! !!! ! ! ! % # !! !! ! ! !! !! !! ! !! ! ! ! !! ! ! ! ! ! ! ! ! "# # ! !! !! !! ! ! ! !%! ! ! ! ! ! ! ! ! !! !! "    # 

Narciarze
Tak wic, bez zmniejszenia oglnoci, moemy przyj, e s1 biegnie przez wierzchoki lece na lewym p-obwodzie grafu (zobacz rysunek 1). Podobnie moemy poprzesuwa pozostae cieki. Zauwamy, e wrd wszystkich moliwych cieek, ktre prowadz od grnej do dolnej stacji wycigu i nie maj (za wyjtkiem stacji wycigu) wsplnych wierzchokw z s1 , istnieje skrajnie lewa cieka. Bez naruszenia warunkw zadania moemy przyj, e s2 jest wanie tak ciek. Analogicznie ustalamy kolejne cieki. Przyjmujemy, e si jest skrajnie lew spord wszystkich moliwych cieek, ktre prowadz od grnej do dolnej stacji wycigu i nie maj (za wyjtkiem stacji wycigu) wsplnych wierzchokw z adn ze cieek s1 , . . . , si1 . Wyania si nastpujcy schemat algorytmu: (1) i := 1; (2) powtarzaj, dopki mona, konstrukcj kolejnych cieek: (a) wyznacz si jako skrajnie lew ciek prowadzc od grnej do dolnej stacji wycigu i (dla i > 1) nie przechodzc (za wyjtkiem stacji wycigu) przez wierzchoki nalece do cieek s1 , . . . , si1 , (b) jeli konstrukcja cieki si udaa, to zwiksz i o 1; (3) jeeli w zadanym grae bya krawd prowadzca bezporednio z grnej do dolnej stacji wycigu, to zwiksz i o 1; (4) (i 1) jest rwne szukanej liczbie cieek. Pozosta do rozwizania problem jak wyznaczy skrajnie lew ciek w odpowiednim podgrae zadanego grafu. ciek tak konstruujemy poczwszy od grnej stacji wycigu, korzystajc z procedury przeszukiwania grafu w gb (zobacz [13] lub [10]). Wane jest, aby w trakcie przeszukiwania przeglda krawdzie wychodzce z danego wierzchoka w kolejnoci od lewej do prawej (ze wschodu na zachd), czyli zgodnie z kolejnoci, w jakiej zostay one podane w pliku wejciowym. W momencie osignicia dolnej stacji wycigu przerywamy przeszukiwanie szukana cieka znajduje si wwczas na stosie. W trakcie przeszukiwania grafu kolorujemy odwiedzone wierzchoki. Zauwamy, e pokolorowane zostaj wierzchoki tworzce skonstruowan ciek oraz niektre wierzchoki lece na lewo od tej cieki. Konstruujc kolejne cieki omijamy wierzchoki ju pokolorowane (za wyjtkiem stacji wycigu). Powyszy algorytm znajdowania skrajnie lewej cieki mona zaimplementowa w nastpujcy sposb.
1: 2: 3: 4: 5: 6: 7: 8: 9:

53

const MaxN = 5 000; { Maksymalna liczba polan (wierzchokw grafu) } type { Lista ssiedztwa jednego wierzchoka. } { Element 0-wy zawiera liczb wierzchokw na licie. } TListaSasiedztwa = array [0..MaxN ] of Integer ; PListaSasiedztwa = TListaSasiedztwa; var { Graf reprezentowany jako listy ssiedztwa wierzchokw. }

54

Narciarze
10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:

T : array [1..MaxN ] of PListaSasiedztwa; { Tablica do kolorowania odwiedzonych wierzchokw. } Odwiedzony: array [1..MaxN ] of Boolean; N : Integer ; { Liczba wierzchokw. } function Wglab (w : Integer ): Boolean; { Realizuje przeszukanie grafu T w gb poczwszy od wierzchoka w . Zwraca true w przypadku dotarcia do dolnej stacji (sukcesu). } var i : Integer ; s: Boolean; begin if w = N then { Osignito doln stacj wycigu. } Wglab := true else begin Odwiedzony[w ] := true; s := false; i := 1; { Przeszukuj a do pierwszego sukcesu. } while not s and (i T [w ][0]) do begin if not Odwiedzony [T [w ][i ]] then s := Wglab (T [w ][i ]); Inc (i ) end; Wglab := s end end; Szukan liczb cieek moemy wyznaczy w nastpujcy sposb:

1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:

function ZnajdzRozwiazanie: Integer ; { Znajduje rozwizanie metod poszukiwania najbardziej skrajnej cieki. } var i : Integer ; function UsunTraseBezposrednia: Boolean; { Usuwa ewentualn bezporedni krawd 1N , zwraca true, gdy takie poczenie istniao. } var i , j , lnast: Integer ; zn: Boolean; begin i := 1; zn := false; lnast := T [1][0]; while (i lnast) and not zn do if T [1][i ] = N then zn := true else Inc (i ); if zn then begin

Narciarze
20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:

55

for j := i to lnast - 1 do T [1][j ] := T [1][j +1]; Dec (T [1][0]) end UsunTraseBezposrednia := zn end begin { ZnajdzRozwiazanie. } for i := 1 to N do Odwiedzony [i ] := false; if UsunTraseBezposrednia then i := 1 else i := 0; while Wglab (1) do Inc (i ); ZnajdzRozwiazanie := i end

Z twierdzenia Eulera wiadomo (zobacz [10]), e w kadym spjnym grae planarnym liczba krawdzi m jest takiego rzdu jak liczba wierzchokw n. Dokadniej, dla n 3 mamy n 1 m 3n 6. Jeeli wic nie bdziemy alokowali w pamici caych tablic ssiedztwa, a jedynie ich wypenione fragmenty, to uzyskamy zoono pamiciow algorytmu rzdu n. Sprawdzenie, czy w grae jest krawd czca bezporednio grn i doln krawd wycigu wymaga przejrzenia wszystkich krawdzi wychodzcych z grnej stacji wycigu. Tak wic zoono czasowa tej operacji jest rzdu n. Zauwamy, e w trakcie przegldania grafu po kadej krawdzi przechodzimy co najwyej raz. Std, zoono czasowa przeszukiwania grafu jest rzdu n. Tak wic, zoono czasowa caego rozwizania jest rzdu n.

TESTY
Do sprawdzenia rozwiza zawodnikw uyto 8-miu testw. Testy te mona podzieli na trzy grupy: NAR13.IN proste testy sprawdzajce poprawno rozwizania, NAR46.IN bardziej skomplikowane testy sprawdzajce poprawno rozwizania, NAR78.IN testy badajce zoono rozwizania. W poniszej tabelce podano wielkoci i wyniki dla poszczeglnych testw. Test 1 2 3 4 5 6 7 8 n 2 15 20 900 2 502 4 006 4 600 4 913 m 1 26 37 1 740 2 901 9 001 10 005 9 524 i 1 2 4 2 5 1 001 3 16

Adam Borowski
autor zadania

Marcin Sawicki
opracowanie

Tomasz Wale
program wzorcowy

Paski
Paski to gra dwuosobowa. Rekwizytami potrzebnymi do gry s paski w trzech kolorach: czerwonym, zielonym i niebieskim. Wszystkie paski czerwone maj wymiary c1 , zielone z1 , a niebieskie n 1 , gdzie c, z i n s liczbami naturalnymi. Gracze dysponuj nieograniczon pul paskw kadego koloru (jeli pewnych paskw zabraknie, to zawsze mona dodrukowa). Plansza do gry jest prostoktem o wymiarach p 1 i skada si z p pl o wymiarach 1 1. Gracze wykonuj ruchy na przemian. Ruch polega na uoeniu na planszy paska dowolnego koloru. Obowizuj przy tym nastpujce zasady: pasek nie moe wystawa poza plansz, nie wolno przykrywa (nawet czciowo) paskw uoonych wczeniej, koce paska musz pokrywa si z brzegami pl planszy Przegrywa gracz, ktry jako pierwszy nie moe wykona ruchu zgodnie z zasadami gry. Pierwszy gracz to gracz, ktry wykonuje pierwszy ruch w grze. Mwimy, e pierwszy gracz ma strategi wygrywajc, jeeli niezalenie od posuni drugiego gracza zawsze moe wygra.

Zadanie
Napisz program, ktry: wczyta z pliku tekstowego PAS.IN wymiary paskw i co najmniej jednej planszy, dla kadej planszy stwierdzi, czy pierwszy gracz posiada strategi wygrywajc, zapisze wyniki w pliku tekstowym PAS.OUT.

Wejcie
Pierwszy wiersz zbioru wejciowego PAS.IN zawiera trzy liczby naturalne c, z i n, 1 c, n, z 1000 , rwne dugociom paskw, odpowiednio, czerwonych, zielonych i niebieskich. Liczby w wierszu s poodzielane pojedynczymi znakami odstpu. Drugi wiersz pliku PAS.IN zawiera jedn liczb m, 1 m 1000 , rwn liczbie rnych plansz do rozpatrzenia. Wiersze od 3 to m + 2 zawieraj po jednej liczbie p, 1 p 1000 . Liczba w wierszu i + 2 jest dugoci i-tej planszy.

Wyjcie
Plik wyjciowy PAS.OUT powinien zawiera m wierszy. W i-tym wierszu pliku powinna by zapisana jedna liczba:

58

Paski
1, jeeli pierwszy gracz ma strategi wygrywajc na i-tej planszy, 2, w przeciwnym przypadku.

Przykad
Dla pliku wejciowego PAS.IN: 1 5 1 3 1 5 6 poprawn odpowiedzi jest plik tekstowy PAS.OUT: 1 1 2

ROZWIZANIE
W teorii gier istnieje pojcie gry zamknitej. Gry, ktre polegaj na kolejnych jawnych posuniciach dwu graczy (np. gra w paski, a take szachy, warcaby, kko i krzyyk, wilk i owce itd.) s przykadami gier zamknitych. Znane twierdzenie mwi, e wszystkie takie gry s niesprawiedliwe lub czcze, tzn. e zawsze albo jeden z graczy ma strategi wygrywajc, albo obaj gracze mog co najwyej wymusi remis lub nieskoczon rozgrywk. Gra w paski jest ponadto gr kategoryczn, czyli zawsze koczy si wygran jednego z graczy. Jest zatem niesprawiedliwa: ktry z graczy musi mie strategi prowadzc do zwycistwa. Bdc modym informatykiem, z pewnoci zdajesz sobie spraw, Szanowny Czytelniku, e teoretycznie mona znajdowa strategie wygrywajce poprzez przeszukiwanie drzewa gry, i e chyba dla adnej rozsdnej gry nie jest to wykonalne w praktyce. Mona polemizowa, czy paski s rozsdn gr, w kadym razie przeszukiwanie caego drzewa jest w tym wypadku zbyt pracochonne. Ruch w grze w paski mona jednak postrzega jako rozbicie planszy na mniejsze kawaki. Podsuwa nam to pomys skorzystania z metod programowania dynamicznego. Jeli umielibymy powiedzie co o tych mniejszych kawakach, to by moe umielibymy rwnie sklasykowa jako wyjciow plansz? Chwila namysu pozwala stwierdzi, e nie wystarczy informacja, ktry z graczy ma strategi wygrywajc na kadym z kawakw planszy, by ustali, kto j ma na caej planszy. Potrzebujemy zatem subtelniejszego rozrnienia pomidzy planszami, jednak takiego, z ktrego atwo wynika, kto na danej planszy zwyciy. Jakiego? O tym ju za chwil...

Paski
Skd ten XOR? Szanowny Czytelniku! By moe poznae ju program wzorcowy i wiesz, e w magiczny sposb korzysta on z waciwoci operacji XOR. W tym artykule postaram si przekona Ci, e w rozwizaniu tym nie ma a tak wiele magii. Uyj jzyka teorii grup, co w wielu miejscach uproci opis. Mimo wszystko, zajmie to jednak troch czasu, a skoro Ty ogldae ju rozwizanie wzorcowe, to pewnie nie naleysz do cierpliwych. Dlatego ju teraz przedstawi gwn myl rozwizania. Oto ona: W grze w paski, jeli w jakiej chwili plansza daje si podzieli na dwa identyczne fragmenty, to wiadomo, e gracz, na ktrego przypada kolejka, musi przegra: drugi gracz bdzie powtarza jego ruchy, tyle e symetrycznie, na drugim z identycznych fragmentw planszy. Jeli pierwszy gracz moe jeszcze wykona ruch, to rwnie i drugi moe po nim wykona ruch symetryczny. A jeli pierwszy nie moe, to przegra! Ta cecha gry w paski jest w peni analogiczna do znanej waciwoci operacji XOR, polegajcej na tym, e dla dowolnej liczby k mamy k XOR k = 0. Liczba k odpowiada jednemu z dwu identycznych egzemplarzy planszy, za 0 oznacza porak pierwszego gracza. Oczywicie jest to tylko intuicja. Dlatego zachcam nawet Ciebie, Niecierpliwy Czytelniku, do dalszej lektury.

59

Terminologia Na pocztku gry plansza jest pojedynczym prostoktem zbudowanym z p 1 kwadratowych pl. Kolejne ruchy polegaj na zakrywaniu fragmentw planszy. Pola zakryte nie bior dalej udziau w grze. Natomiast pola wolne po kadym ruchu tworz pewien ukad spjnych prostoktw. Przykadowo, na rysunku 1 widzimy pocztek pewnej rozgrywki na planszy dugoci 24. Po pierwszym ruchu wolne pola tworz ukad dwu prostoktw o dugociach 10 i 6, a po nastpnym mamy trzy prostokty o dugociach 3, 3 i 6. Denicja. Spjny prostokt, zbudowany z wolnych pl, do ktrego skrajw przylegaj pola zajte lub brzegi planszy (czyli nie dajcy si powikszy o kolejne wolne pola bez naruszania spjnoci), nazywa bdziemy obszarem. Kady ukad obszarw (rwnie pocztkowy, czyli zbudowany z jednego obszaru p 1) bdziemy nazywa plansz. Zwrmy uwag, e z punktu widzenia strategii rozgrywki (w szczeglnoci tego, kto wygra), nie ma znaczenia kolejno, w jakiej na danej planszy wystpuj poszczeglne obszary. Czyli plansze 3, 3, 6 oraz 3, 6, 3 moemy uwaa za jednakowe. Dlatego odpowiednim pojciem matematycznym do reprezentowania plansz bdzie multizbir, ktrego elementami bd liczby cakowite dodatnie dugoci poszczeglnych obszarw. Denicja. Multizbir jest to zbir par (x, n), gdzie x jest elementem multizbioru, za n = 1, 2, 3, . . . jest liczb cakowit dodatni, okrelajc w ilu egzemplarzach dany element naley do multizbioru. Oczywicie dla kadego x do multizbioru moe nalee co najwyej jedna para postaci (x, n). Operacje sumy i czci wsplnej s dla multizbiorw zdeniowane w sposb naturalny.

60

Paski
Rys. 1 W trakcie rozgrywki plansza rozpada si na coraz mniejsze obszary

Na przykad, jeli A = {(a, 3), (b, 1), (c, 1)}, za B = {(a, 2), (b, 3), (d, 5)}, to A B = {(a, 5), (b, 4), (c, 1), (d, 5)} oraz A B = {(a, 2), (b, 1)}. Plansze przedstawimy jako multizbiory dugoci tworzcych je obszarw. Przykadowo, przedstawieniem planszy 3, 3, 6, jak rwnie planszy 3, 6, 3, jest ten sam multizbir {(3, 2), (6, 1)}. W dalszych rozwaaniach potrzebna nam bdzie operacja czenia dwu plansz, czyli budowania planszy, skadajcej si ze wszystkich obszarw, wchodzcych w skad obu plansz. Operacji czenia plansz dokadnie odpowiada suma multizbiorw.

Odrobina abstrakcji Rozwaamy gr rozpoczynajc si od planszy p1 i prowadzon przy uyciu paskw o dugociach c, z i n. W kadym stanie gry plansza bdzie zatem zbudowana z obszarw o dugociach p. Oczywicie, nie kada plansza zbudowana z takich obszarw moe si pojawi w naszej rozgrywce, w szczeglnoci suma dugoci obszarw nigdy nie przekroczy p. Na nasze potrzeby wygodnie jednak bdzie o tym zapomnie i zbada zbir X wszystkich plansz, zbudowanych ze skoczonej liczby obszarw, z ktrych kady ma dugo p. Zatem X jest rodzin skoczonych multizbiorw, ktrych elementy s liczbami od 1 do p. Dziki temu, w zbiorze X wykonalne jest dziaanie czenia plansz (czyli dodawania multizbiorw) to znaczy, e plansza uzyskana przez poczenie dwu elementw zbioru X rwnie naley do tego zbioru. Zwrmy uwag, e w zbiorze X znajduje si rwnie plansza pusta, czyli pusty multizbir (odpowiada ona cakowitemu wypenieniu planszy paskami). Oznaczmy j przez . Dla dowolnego x X mamy oczywicie x = x, czyli jest elementem neutralnym dla dziaania czenia plansz. Nadto czenie plansz jest, jak kady widzi, przemienne i (jak sama nazwa

Paski
wskazuje) czne. Denicja. Zbir Y z dziaaniem dwuargumentowym + nazywamy grup przemienn albo abelow, jeli spenia on nastpujce warunki: czno: dla dowolnych y1 , y2 , y3 Y mamy y1 + (y2 + y3 ) = (y1 + y2 ) + y3 . Przemienno: dla dowolnych y1 , y2 Y zachodzi y1 + y2 = y2 + y1 . Istnieje element e Y taki, e dla kadego y Y zachodzi y + e = e + y = y. Element e nazywamy elementem neutralnym grupy. Dla kadego elementu y Y istnieje taki y Y , e y + y = e. Przyjmuje si oznaczenie y = y . Mwimy, e y jest elementem odwrotnym do y. Pojcie grupy przemiennej powinno by dobrze znane kademu: najprostsze przykady to liczby cakowite (lub wymierne, lub rzeczywiste) z dodawaniem (w tym kontekcie mwi si raczej o elemencie przeciwnym, a nie odwrotnym), liczby wymierne (lub rzeczywiste) bez zera z mnoeniem, wektory na paszczynie z dodawaniem wektorw, itd. Widzimy, e zbir X z dziaaniem spenia wszystkie warunki oprcz odwracania. Przypomnijmy sobie jednak, e na planszy, dajcej si podzieli na dwa identyczne fragmenty gracz, na ktrego przypada kolejka, musi przegra, tak samo jak na planszy . Z punktu widzenia strategii mona wic uwaa, e plansza postaci x x jest rwnowana planszy . Postaramy si zatem tak przerobi zbir X z dziaaniem , by kady jego element by odwrotny sam do siebie. Z grubsza biorc, utosamimy elementy postaci x x z . Znw bdzie nam potrzebna Denicja. Relacja dwuargumentowa na zbiorze Y jest relacj rwnowanoci, jeli jest zwrotna, tzn. dla kadego y Y zachodzi y y, symetryczna, tzn. dla kadych y1 , y2 Y jeli y1 y2 , to rwnie y2 y1 , przechodnia, czyli jeli dla y1 , y2 , y3 Y zachodzi y1 y2 oraz y2 y3 , to take y1 y3 . Relacje rwnowanoci s matematycznym sposobem na utosamienie pewnych elementw zbioru: kada relacja rwnowanoci na zbiorze Y jednoznacznie zadaje jego podzia, czyli rodzin A podzbiorw zbioru Y tak, e y1 y2 wtedy i tylko wtedy, gdy dla pewnego elementu B rodziny A zachodzi jednoczenie y1 B oraz y2 B. Tak rodzin oznacza si przez Y / = A. Kady element y Y naley do dokadnie jednego elementu B Y / ; ten jedyny element oznaczamy [y] = B i nazywamy klas abstrakcji elementu y. Oczywicie [y1 ] = [y2 ] wtedy i tylko wtedy, gdy y1 y2 . Czyli [y] Y jest zbiorem tych i tylko tych elementw zbioru Y , ktre wanie utosamilimy z y za pomoc relacji . Dobrym pomysem okazuje si nastpujce okrelenie naszej relacji: x1 x2 wtedy i tylko wtedy, gdy na planszy x1 x2 gracz rozpoczynajcy musi przegra (tzn. jego przeciwnik posiada strategi wygrywajc). Wiemy zatem, e zawsze x x. Poza tym jest oczywicie wiele innych par x1 , x2 takich, e x1 x2 jak si niedugo okae, dziaa to na nasz korzy. Przypominam, e rozmiary paskw c, z, n s cay czas ustalone. Dla innych rozmiarw paskw moemy otrzyma zupenie inn relacj!

61

62

Paski
Z drugiej strony, uwany Czytelnik niedugo ju zorientuje si, e utosamianie plansz, na ktrych gracz rozpoczynajcy ma strategi wygrywajc, byoby duo gorszym pomysem. Poza bardzo prostymi przypadkami, musielibymy wwczas w trosce o przechodnio naszej relacji konsekwentnie poskleja ze sob wszystko. Zadanie dla czytelnika. Prosz sprawdzi, e jest istotnie relacj rwnowanoci (spenia denicj). Wskazwka: aby udowodni przechodnio, naley, znajc strategi wygrywajc drugiego gracza dla plansz x1 x2 oraz x2 x3 , opisa sposb (algorytm) gry dla drugiego gracza, ktry zagwarantuje mu zwycistwo na planszy x1 x3 . Zagadka tylko dla wtajemniczonych: czy jeli zdeniowalibymy jako najmniejsz relacj rwnowanoci na X, ktra utosamia wszystkie plansze postaci xx z , to czy = ? A gdyby dodatkowo zarzda, by byo najmniejsz kongruencj na X ze wzgldu na ? No dobrze, powiecie, utosamilimy jakie elementy, ale przecie dziaanie byo okrelone na X, a my mamy teraz inny zbir X / . A jednak wszystko jest pod kontrol! Przypomnijmy tylko jedno pojcie, z ktrym kady spotka si (lub spotka) w szkole: Denicja. Relacja rwnowanoci jest kongruencj na zbiorze Y ze wzgldu na dziaanie +, jeli dla dowolnych y1 , y1 , y2 , y2 Y jeli tylko y1 y1 oraz y2 y2 , to zachodzi rwnie y1 + y2 y1 + y2 . Przypadek szkolny to relacja przystawania modulo n, ktra utosamia liczby cakowite a, b Z wtedy i tylko wtedy, gdy a b dzieli si przez n. Jest to relacja rwnowanoci, co wicej jest to kongruencja ze wzgldu na dodawanie, odejmowanie i mnoenie. Kongruencja pozwala wykonywa dziaania w zbiorze klas abstrakcji Y / : aby np. doda dwie klasy, bierzemy dowoln par ich elementw i dodajemy, a nastpnie znajdujemy klas abstrakcji sumy. To, e relacja jest kongruencj, nie oznacza nic wicej, ni e tak zdeniowane dziaanie jest dobrze okrelone w zbiorze Y / , tzn. e rne wybory reprezentantw prowadz w wyniku do tej samej klasy abstrakcji. Na cae szczcie, jest kongruencj w X ze wzgldu na . Prosz to sprawdzi wprost z denicji, dowd bdzie podobny do dowodu faktu, e relacja jest przechodnia. Mamy zatem Fakt. X / z dziaaniem zadanym przez jest grup przemienn, z elementem neutralnym [] (klasa abstrakcji zbioru pustego). Dziaanie w tej grupie rwnie bdziemy oznacza , za element neutralny po prostu przez 0 = []. Istotnie, podzielenie X przez nie mogo popsu cznoci, ani przemiennoci , ani neutralnoci (ktra przeniosa si na ca klas abstrakcji []), i oczywicie uzyskalimy elementy odwrotne: kady element jest odwrotny sam do siebie.

Do czego bya nam potrzebna ta odrobina abstrakcji? Potrzeba wyjani, czemu mia suy ten dugi cig denicji. Celw byo kilka. Po pierwsze, moemy teraz zwile sformuowa nasz cel: algorytm ma stwierdza, czy dla danej planszy x, skadajcej si z jednego obszaru dugoci p, zachodzi x ,

Paski
czyli czy [x] = 0 (gdy zgodnie z nasz denicj, x wtedy i tylko wtedy, gdy drugi gracz ma strategi wygrywajc na planszy x = x). Po drugie, bez okrelenia naszej grupy X / , , 0 wiele faktw, ktre w tej chwili s dla nas najzupeniej oczywiste, naleaoby za kadym razem dowodzi rcznie w sposb podobny do dowodu przechodnioci relacji (a wic byyby one pozostawione jako zadania dla Ciebie, Szanowny Czytelniku). Przykad takiego faktu: jeli na planszy x strategi wygrywajc ma drugi gracz (w szczeglnoci, jeli np. x = x x ), to na planszy x1 x strategi wygrywajc ma ten sam gracz, co na planszy x1 . Uzasadnienie: [x] = 0, wic [x1 ] [x] = [x1 ]. Wasnoci grup pozwalaj nam wycisn wszystko co si da z przeprowadzonych ju przez Ciebie dowodw, e jest relacj rwnowanoci i kongruencj ze wzgldu na . Po trzecie i najwaniejsze, jak si za chwil okae, klasy abstrakcji naszej relacji daj si efektywnie oblicza metod programowania dynamicznego.

63

Troch porzdkw Na drodze do rozwizania czeka nas jeszcze jedno niespodziewane odkrycie: klasy plansz (czyli klasy abstrakcji relacji ) daj si uporzdkowa! Zauwamy najpierw, e dla dowolnej planszy x, jeli [x] = 0, to z planszy x mona jednym ruchem doj do pewnej planszy x0 0 = []. Innymi sowy, z kadej planszy x wygrywajcej dla gracza, na ktrego przypada kolejka, mona zawsze jednym ruchem przej do jakiej planszy x0 przegrywajcej dla gracza, ktrego kolejka wypadnie po tym ruchu (a wic ktry bdzie musia pooy pierwszy pasek na planszy x0 ). Jest to ten wanie ruch, ktry graczowi rozpoczynajcemu gr na planszy x gwarantuje zwycistwo. Oczywicie, na planszy x by moe da si wykona wiele innych ruchw, ktre mog prowadzi do plansz z innych klas. Wane jest jednak istnienie co najmniej jednego wygrywajcego posunicia dla kadej spord plansz z klasy [x] = 0. Wykorzystajmy konsekwentnie t obserwacj i okrelmy relacj dwuargumentow na zbiorze X / jak nastpuje: dla klas B1 , B2 X / zachodzi B1 B2 wtedy i tylko wtedy, gdy z kadej planszy x1 B1 mona jednym ruchem doj do pewnej planszy x2 B2 . Na razie wiemy tylko, e dla [x] = B = 0 jest B 0. Nie wiemy ani czy moe zaj 0 B dla jakiego B, ani czy moe by B1 B2 dla jakichkolwiek B1 , B2 = 0. Fakt 1. (najwaniejszy) Jeli B1 , B2 X / i B1 = B2 , to albo B1 B2 , albo B2 B1 . Dowd. Niech nie zachodzi ani B1 B2 , ani B2 B1 . Czyli istnieje plansza x1 B1 , z ktrej jednym ruchem nie da si doj do adnej spord plansz z klasy B2 . Analogicznie, istnieje pewna plansza x2 B2 , na ktrej adne posunicie nie prowadzi do klasy B1 . Rozwamy plansz x1 x2 . Jeli gracz, na ktrego przypada kolejno, wykona na tej poczonej planszy ruch w obrbie czci x1 , to przejdzie do pewnej planszy x1 x2 , gdzie x1 B2 . A zatem [x1 ] = [x2 ]. Do tej nierwnoci dodajmy stronami [x2 ], otrzymamy [x1 ] [x2 ] = [x2 ] [x2 ], czyli [x1 x2 ] = 0. Jest to zatem ruch prowadzcy do poraki. Gracz przegra rwnie, jeli pooy pasek w obrbie planszy x2 . Czyli plansza x1 x2 jest dla niego przegrywajca, to znaczy [x1 x2 ] = 0, skd B1 = B2 , co koczy dowd.

64

Paski
Fakt 2. Dla adnego B X / nie zachodzi B B. Dowd. Jeli by tak byo, to startujc od dowolnej planszy x1 B moglibymy wykona ruch, prowadzcy do pewnej planszy x2 B, nastpnie jednym ruchem przeszlibymy do planszy x3 B i tak w nieskoczono. A nie jest to moliwe, bo po kadym ruchu liczba wolnych pl zmniejsza si co najmniej o dugo najkrtszego z paskw c, z, n! Fakt 3. Dla adnych B1 , B2 X / nie zachodzi jednoczenie B1 B2 i B2 B1 . Dowd. Podobnie jak poprzednio, prowadzioby to do istnienia nieskoczonej rozgrywki, w ktrej na zmian przechodzilibymy z planszy z klasy B1 do planszy z klasy B2 i z powrotem. Fakt 4. Jeli B1 B2 oraz B2 B3 , to B1 B3 . Dowd. Ten fakt jest chyba do zaskakujcy, gdy oznacza, e z planszy z klasy B1 do planszy z klasy B3 mona zawsze przej jednym ruchem, a nie dwoma (cho oczywicie dwoma te si da). Uzasadnienie jest jednak proste: nie moe oczywicie by B1 = B3 (wykluczylimy to przed chwil). Musi by zatem B3 B1 lub B1 B3 . Jednak w tym pierwszym przypadku znw znalelibymy nieskoczon rozgrywk, prowadzc kolejno z klasy B1 do B2 , z B2 do B3 , a z B3 na powrt do B1 i tak w kko. Pozostaje jedyna moliwo B1 B3 . Fakt 5. Klas plansz w X jest skoczenie wiele. Dowd. (Pamitamy, e sam zbir X by nieskoczony.) Niech xm oznacza plansz, zbudowan z jednego obszaru dugoci m (czyli xm = {(m, 1)}), gdzie 1 m p. Wwczas oczywicie kada plansza x X daje si przedstawi jako suma x = x1 x1 . . . x1 x2 . . . x2 . . . xp . . . xp
n1 n2 np

Oczywicie dopuszczamy, by dla pewnych k byo nk = 0. Plansz x reprezentuje multizbir {(1, n1 ), . . . , (p, np )}, trzeba tylko pomin te pary (k, nk ), dla ktrych nk = 0. Aby znale klas planszy x zauwamy, e [xm ] . . . [xm ] jest rwne [xm ] dla nm
nm

nieparzystego, za 0 dla nm parzystego. Suma ta upraszcza si zatem do co najwyej jednego skadnika. W zwizku z tym, mamy [x] = B1 B2 . . . Bp gdzie odpowiednio Bm = [xm ] lub Bm = 0, zalenie od parzystoci liczby nm . Sum tej postaci jest za tylko skoczona liczba, dokadnie 2p . Zwrmy uwag, e klas plansz moe nie by dokadnie 2p , tylko mniej, gdy moe si np. zdarzy, e dla pewnych m = m jest [xm ] = [xm ]. Np. jeli c, z, n 3, to oczywicie 0 = [x1 ] = [x2 ]. Wniosek z faktw 15: Klasy plansz mona ponumerowa kolejnymi liczbami naturalnymi tak, by klasa 0 miaa numer 0 i by dla dowolnych dwch klas B , B numer klasy B by wikszy od numeru klasy B wtedy i tylko wtedy, gdy B B . Na podstawie udowodnionych faktw wniosek ten powinien wydawa si oczywisty. Takie wasnoci moe po prostu mie tylko naturalny porzdek na liczbach

Paski
naturalnych 0 < 1 < 2 . . . < l 1 < l. Jako zadanie proponuj uwanie uzasadni ten wniosek np. przez indukcj lub posikujc si pojciami dagu (acyklicznego grafu skierowanego) i sortowania topologicznego. Klas o numerze j bdziemy od teraz oznacza B j . W szczeglnoci, 0 = B 0 .

65

Programowanie dynamiczne Najwysza pora przej do opisu algorytmu. Przypominam, e naszym celem jest obliczanie klas poszczeglnych plansz. Na podstawie wycignitego przed chwil wniosku wiemy, e z kadej planszy z klasy B j mona jednym ruchem przej do kadej z klas B 0 , B 1 , . . . , B j1 . Wiemy te, e nie zachodzi Bj Bj , czyli z pewnej planszy z klasy Bj nie da si wykona ruchu tak, by pozosta w klasie Bj . Prawd jest jednak mocniejsze stwierdzenie: nigdy nie da si wykona ruchu tak, by pozosta w tej samej klasie. Dowd jest bardzo prosty: gdyby tak byo dla pewnej planszy x B, to na planszy x x gracz pierwszy wykonaby to posunicie na jednej z powek, doprowadzajc do sytuacji x x, gdzie x, x B, czyli [x] = [x ] = B, skd [x x] = 0. Z sytuacji dla siebie przegrywajcej xx przeszedby zatem do sytuacji, w ktrej przegra musi jego oponent, co oczywicie jest sprzeczne z naszymi denicjami i ze zdrowym rozsdkiem. Widzimy zatem co nastpuje: numer planszy x to jedyna taka liczba j, e z planszy x da si jednym posuniciem przej do kadej z klas B 0 , B 1 , . . . , B j1 , i nie da si adnym posuniciem przej do adnej spord plansz, nalecych do klasy B j . Ta obserwacja poprowadzi nas ju prosto do algorytmu, ktry indukcyjnie wyznacza numery klas plansz. Dla porzdku przytocz jeszcze tylko jedn denicj: Denicja. Jeli Y z dziaaniem + jest grup, a Y Y takim podzbiorem, ktry rwnie jest grup ze wzgldu na to samo dziaanie, to mwimy, e Y jest podgrup Y. Przykadowo, liczby cakowite podzielne przez 3 stanowi podgrup grupy liczb cakowitych z dodawaniem. Oznaczmy przez Xm X zbir wszystkich plansz, zbudowanych z obszarw, z ktrych aden nie jest duszy ni m. Oczywicie X = Xp . Niech Xm oznacza zbir tych wszystkich klas plansz (elementw grupy X / ), ktre maj reprezentanta z Xm . Jest on zamknity ze wzgldu na dziaanie i oczywicie jest podgrup grupy X / . Mamy zatem 0 = X0 X1 Xp = X / . Zauwamy te, e kady ze zbiorw Xm skada si z klas o kolejnych numerach, od B 0 do pewnego B N . Jest tak, gdy jeli N jest najwiksz liczb tak, e B N Xm , to pewna plansza x B N skada si z obszarw nie duszych ni m. Mona z niej jednym ruchem doj do kadej z klas B 0 , B 1 , . . . , B N 1 , a ruch w grze w paski nie moe spowodowa, by ktrykolwiek z obszarw wyduy si. To dowodzi, e kada z tych klas ma reprezentanta w Xm , czyli naley do Xm . Podam teraz algorytm, ktry po kadym kroku dla kolejnych liczb m potra wyznaczy numer klasy kadej planszy ze zbioru Xm wykonywa dziaanie w grupie Xm (to znaczy, wyznacza numer klasy B i B j dla B i , B j Xm )

66

Paski
Pierwszy krok algorytmu jest trywialny: wiemy, e plansza pusta ma numer 0, a grupa X0 = 0 jest grup trywialn. Zamy wic, e potramy wyznacza klasy dla plansz z Xm1 oraz e dla takich klas potramy wykonywa dziaanie . Wemy plansz xm zbudowan z jednego obszaru dugoci m. Przejrzyjmy wszystkie moliwe ruchy, jakie moemy wykona na tej planszy. Kady z tych ruchw prowadzi do planszy zbudowanej z 1 lub 2 obszarw, z ktrych kady ma dugo m 1. Zatem zgodnie z zaoeniem potramy wyznaczy numery klas wszystkich tych plansz (jeli jaki ruch rozspaja nasz plansz, to numer klasy wyznaczymy, obliczajc klas obu obszarw, na ktre rozpada si nasza plansza). Mamy wwczas pewno, e klasa, do ktrej naley xm , jest najmniejsz liczb naturaln, jaka nie pojawia si wrd otrzymanych numerw klas plansz. Jeli np. moliwe ruchy prowadz z xm do plansz z klas o numerach 0, 1, 2, 3, 6, 9, 13, to znaczy, e [xm ] = B 4 . S tu dwie moliwoci. Albo [xm ] Xm1 , skd wynika, e Xm = Xm1 i nic wicej w tym kroku algorytmu nie musimy robi, albo z planszy xm mona doj do kadej z klas, nalecych do Xm1 , czyli klasa [xm ] nie jest nam jeszcze znana. Ten drugi przypadek musimy rozway dokadniej. Wiemy, e Xm1 = {B 0 , . . . , B M 1 } dla pewnego M . Std natychmiastowy wniosek, e [xm ] = B M Xm \ Xm1 . Rozwamy teraz klasy postaci [xm ] B j , gdzie 0 j M 1. Wszystkie one s elementami Xm . adna z nich nie naley do Xm1 , gdy jeli [xm ]B j = B k Xm1 , to oczywicie mielibymy rwnie [xm ] = [xm ] B j B j = B k B j X m1 (suma elementw B j i B k grupy X m1 rwnie naley do tej grupy). Klasa kadej planszy x Xm , jeli nie naley do grupy Xm1 , to moe by przedstawiona w tej postaci. Plansza x Xm jest bowiem poczeniem pewnej (parzystej bd nieparzystej) liczby obszarw dugoci m oraz planszy, nalecej do Xm1 , czyli x = xm xm . . . xm x , gdzie x Xm1 . Std istotnie [x] = [xm ] [x ] lub [x] = [x ] Xm1 , gdzie [x ] = B j dla pewnego j < M . Dla rnych wartoci j klasy [xm ] B j s midzy sob rne, bo do nierwnoci B j = B j mona stronami doda [xm ]. W takim razie mamy Xm = {B 0 , B 1 , . . . , B M 1 , [xm ] B 0 , [xm ] B 1 , . . . , [xm ] B M 1 } Co wicej, skoro umielimy wykonywa dziaanie w grupie Xm1 , to pamitajc, e [xm ] [xm ] = 0, umiemy je wykona take w Xm ! Teraz ju nietrudno zgadn, e numerem klasy [xm ] B j bdzie M + j. Aby si o tym przekona, wybierzmy dowolnego reprezentanta x B j i rozwamy plansz xm x. Na tej planszy moemy wykona ruch albo w obrbie czci xm , albo x. Wykonujc ruch w czci x moemy przej do dowolnie wybranej spord klas [xm ] B i , gdzie 0 i < j. By moe uda nam si rwnie przej do ktrej z klas [xm ] B k dla k > j, ale dla kadego takiego k znajdziemy reprezentanta x B j ,

Paski
dla ktrego nie bdzie to moliwe. Wszystko odbywa si analogicznie jak na samej planszy x B j , bez doczonej czci xm . Natomiast kadc pasek w czci xm , moemy przej do dowolnej klasy B Xm1 . Wystarczy wzi B = B B j . Wiemy, e B Xm1 , wic istnieje taki ruch na planszy xm , ktry prowadzi do klasy B . Wykonujc ten ruch na planszy xm x, istotnie otrzymamy w wyniku plansz klasy B B j = (B B j ) B j = B . Widzimy te, e ruch w obrbie xm nie doprowadzi nas do adnej klasy spoza Xm1 . Podsumowujc, widzimy wyranie, e: B M 1 [xm ] = [xm ] B 0 [xm ] B 1 [xm ] B 2 [xm ] B M 1 .

67

Poniewa wiemy skdind, e Xm = {B 0 , . . . , B 2M 1 }, to musi rzeczywicie zachodzi [xm ] B j = B M +j , dla kadego 0 j M 1. W ten sposb z nawizk wypeniamy wszystkie warunki indukcyjne, dotyczce naszego algorytmu. Pozostaje jeszcze jeden drobiazg: widzimy, e po pierwszym kroku znamy tylko jedn plansz (pust), a po kadym nastpnym liczba znanych nam plansz (tzn. liczba elementw grupy Xm ) albo nie zmienia si, albo si podwaja. Bdzie zatem zawsze potg dwjki. W szczeglnoci, w caym powyszym rozumowaniu M byo potg dwjki. Po tej uwadze nie powinno by dla Czytelnika najmniejszym problemem udowodnienie przez indukcj, e dziaaniu w grupie klas plansz odpowiada dokadnie operacja XOR na numerach tych klas. W ten sposb wszystkie tajemnice gry w paski zostay ujawnione.

TESTY

Na potrzeby testowania rozwiza przygotowano 15 testw. Kady z nich zawiera p przypadkw plansz do rozpatrzenia byo to zawsze kolejno p plansz o dugociach od 1 do p. W poniszej tabeli zestawiono wartoci c, z, n oraz p dla poszczeglnych testw. Ponadto, k oznacza najwiksz liczb tak, e co najmniej jedna z plansz xm przy m p naley do klasy B k . Dalej, W1 oznacza liczb tych plansz spord x1 , . . . , xp , ktre s wygrywajce dla gracza rozpoczynajcego (czyli nale do klasy B j dla j > 0), za W2 liczb plansz przegrywajcych dla rozpoczynajcego.

68

Paski
Nr c z n p k 0 1 5 1 6 1 1 2 2 2 10 3 2 3 3 3 20 4 3 4 4 4 50 5 4 2 18 26 70 15 5 1 5 6 905 256 6 2 3 4 100 16 7 3 5 5 100 12 8 2 2 111 200 17 9 1000 1000 1000 1000 1 10 2 38 226 1000 150 11 3 221 233 1000 103 12 2 16 60 1000 65 13 3 29 91 1000 139 14 3 51 51 1000 64 Testy 4 i 5 oraz 6, 7, 8 i 9 zostay zgrupowane. W1 3 7 16 43 63 903 99 94 181 1 984 977 985 987 980 W2 3 3 4 7 7 2 1 6 19 999 16 23 15 13 20

PODSUMOWANIE
Zadanie Paski byo prawdopodobnie jednym z najtrudniejszych zada w historii Olimpiady. Mimo e byo zadaniem z pierwszego etapu, a wic mona byo powici na nie wiele czasu i posikowa si przy pracy literatur, to jednak poprawnie rozwiza je tylko jeden zawodnik. Przedstawione w niniejszym artykule rozumowanie jest oparte na dowodzie poprawnoci programu wzorcowego. Autorem tego programu i dowodu jest Tomasz Wale. Podstawowe pojcia teorii gier s przystpnie objanione w pierwszym rozdziale znakomitej ksiki [HS]. Serdecznie zachcam do lektury! Czytelnikom zainteresowanym tematem polecam rwnie pozycj [JC], a w szczeglnoci zawarte tam informacje o grze Nim. Gra ta okazuje si mie wiele wsplnego z gr w paski. W niej take do znalezienia strategii wygrywajcej przydaje si operacja XOR.

BIBLIOGRAFIA
[HS] Hugo Steinhaus Kalejdoskop matematyczny, WSiP Warszawa 1989 [JC] John Conway On Numbers and Games, Academic Press, Inc. New York 1976

Zawody II stopnia
opracowania zada

Marcin Kubica
autor zadania, opracowanie

Marcin Mucha
program wzorcowy

Podpisy
W Urzdzie Ochrony Bajtocji (UOB) zatrudnieni s urzdnicy oraz dowdcy. W archiwum znajduj si teczki z aktami wszystkich urzdnikw. W kadej teczce znajduje si podpis urzdnika oraz podpisy pracownikw (urzdnikw lub dowdcw), ktrzy porczaj za jego lojalno. Kady nowoprzyjmowany urzdnik musi uzyska przynajmniej jedno porczenie. Z biegiem czasu lista porczycieli moe si powiksza. UOB dowiedzia si ostatnio, e do grona dowdcw przenikn szpieg wrogiej Mikromiklandii. Kolejni szpiedzy byli wprowadzani do UOB na stanowiska urzdnicze dziki porczeniu szpiega-dowdcy i/lub innych wprowadzonych szpiegw. Tacy szpiedzy maj porczenia wycznie od pracownikw bdcych szpiegami. Wiarygodno urzdnika mona podway, jeeli porednio nie ma on porczenia adnego dowdcy, ktry nie jest szpiegiem, tzn. nie istnieje taki cig pracownikw UOB p1 , p2 , . . . , pk , e p1 jest dowdc nie bdcym szpiegiem, pk jest danym urzdnikiem i (dla i = 1 , . . . , k 1 ) pi porczy za pi+1 . Jeeli zaoenie o pewnym dowdcy, e jest szpiegiem spowodowaoby, e wiarygodno urzdnika zostaaby podwaona, to urzdnik ten jest podejrzany o szpiegostwo. Dowdztwo UOB chciaoby zobaczy list takich urzdnikw, i to jak najszybciej!

Przykad
Dowdcy: Anna, Grzegorz. Urzdnicy: Bolesaw (porczya Anna), Celina (porczy Bolesaw), Dorota (porczyli Bolesaw i Celina), Eugeniusz (porczyli Anna i Grzegorz), Felicja (porczy Eugeniusz), Halina (porczyli Grzegorz i Ireneusz), Ireneusz (porczyli Grzegorz i Halina). Podejrzani: Bolesaw, Celina, Dorota, Halina, Ireneusz.

Zadanie
Napisz program, ktry: wczyta z pliku tekstowego POD.IN liczb dowdcw i urzdnikw w UOB oraz informacje o porczeniach, wyznaczy list urzdnikw podejrzanych o szpiegostwo, wyniki zapisze do pliku tekstowego POD.OUT.

Wejcie
W pierwszym wierszu pliku tekstowego POD.IN zapisana jest dokadnie jedna dodatnia liczba cakowita n (1 n 500 ) bdca liczb pracownikw UOB. Pracownicy s ponumerowani od 1 do n. W kolejnych n wierszach zapisane s opisy porcze. W i + 1 -ym wierszu pliku znajduje si opis porcze udzielonych pracownikowi nr i. Jest to cig liczb cakowitych

72

Podpisy
poodzielanych pojedynczymi odstpami. Pierwsza liczba w tym cigu, 0 mi , jest rwna liczbie porcze udzielonych pracownikowi nr i. Kolejne mi liczb to numery pracownikw, ktrzy porczyli za prawdomwno pracownika nr i. (Tak wic liczba wyrazw cigu w i + 1 -ym wierszu wynosi mi + 1 .) Dowdcy to Ci pracownicy, za ktrych nikt nie porczy.

Wyjcie
Twj program powinien: w kolejnych wierszach pliku tekstowego POD.OUT zapisa w rosncej kolejnoci, po jednej liczbie w kadym wierszu, cig dodatnich liczb cakowitych bdcych numerami urzdnikw podejrzanych o szpiegostwo jeeli tacy urzdnicy s, w pierwszym i jedynym wierszu pliku wyjciowego POD.OUT zapisa dokadnie jedno sowo BRAK jeeli takich urzdnikw nie ma.

Przykad
Dla pliku wejciowego POD.IN: 9 0 1 1 1 2 2 2 3 2 1 7 1 5 0 2 7 9 2 7 8 poprawn odpowiedzi jest plik tekstowy POD.OUT: 2 3 4 8 9

ROZWIZANIE
Zadanie to mona w naturalny sposb wyrazi w jzyku teorii grafw. Mamy dany graf skierowany. Wierzchoki tego grafu reprezentuj pracownikw UOB, a krawdzie reprezentuj porczenia. Krawd v u reprezentuje porczenie udzielone przez pracownika v urzdnikowi u. Dowdcy s reprezentowani przez te wierzchoki, do ktrych nie prowadz adne krawdzie. Niech u bdzie wierzchokiem reprezentujcym urzdnika. Jak sprawdzi czy u jest podejrzany o szpiegostwo? Zaley to od tego, ilu dowdcw porednio porczyo za jego lojalno. Temu, e pewien dowdca d porednio porczy za lojalno urzdnika u odpowiada cieka prowadzca z d do u. Tak wic, jeli istniej przynajmniej dwa wierzchoki reprezentujce dowdcw, z ktrych moemy poprowadzi cieki do u,

Podpisy
to u nie jest podejrzany o szpiegostwo gdyby jeden z tych dowdcw okaza si szpiegiem, to i tak drugi porczy porednio za lojalno u. Jeeli natomiast istnieje co najwyej jeden wierzchoek d reprezentujcy dowdc, z ktrego moemy poprowadzi ciek koczc si w u, to u jest podejrzany o szpiegostwo gdyby d okaza si szpiegiem, to wiarygodno u zostaaby podwaona. Zadanie to mona rozwiza wykorzystujc przeszukiwanie grafu wszerz lub w gb (zobacz [10] lub [13]). W najprostszej wersji moemy dla kadego urzdnika wyznaczy liczb dowdcw, ktrzy porednio porczyli za niego, przeszukujc graf wstecz. Podobnie, moemy dla kadego dowdcy wyznaczy urzdnikw, za ktrych on porczy, przeszukujc graf zgodnie z kierunkiem krawdzi. Rozwizania te s jednak nieefektywne. Ich zoono czasowa jest O(nm), gdzie n jest liczb wierzchokw, a m jest liczb krawdzi w grae. Zauwamy jednak, e nie musimy wyznacza wszystkich dowdcw, ktrzy porednio porczyli za danego urzdnika. Jeli znajdziemy dwch takich dowdcw, to nie musimy wyznacza kolejnych dany urzdnik i tak nie jest podejrzany o szpiegostwo. Rwnie wszyscy ci, za ktrych ten urzdnik porczy te nie s podejrzani o szpiegostwo. Ponadto nie jest istotne, ktrzy dowdcy porczyli porednio za danego urzdnika, a jedynie ilu. Moemy wic kademu urzdnikowi przyporzdkowa licznik okrelajcy ilu dowdcw porednio porczyo za niego: aden, jeden, dwch lub wicej. Jeli licznik jest rwny jeden, to dodatkowo pamitamy ktry dowdca porczy porednio za urzdnika informacj t bdziemy wykorzystywa zamiast kolorowania wierzchokw w trakcie przeszukiwania grafu. Pocztkowo przyjmujemy, e aden dowdca nie porczy porednio za adnego urzdnika. Nastpnie, dla kadego dowdcy przeszukujemy graf poczwszy od niego i zwikszamy liczniki odwiedzonych urzdnikw. Jeli licznik ktrego urzdnika jest rwny jeden i porczy za niego porednio ten dowdca, od ktrego zaczlimy przeszukiwanie grafu, to urzdnik ten by ju w tym przeszukiwaniu odwiedzony. Jeli licznik ktrego urzdnika osignie warto dwch lub wicej, to pomijamy go przy dalszych przeszukiwaniach grafu. W ten sposb kady wierzchoek zostanie odwiedzony co najwyej dwa razy. W rezultacie zoono czasowa takiego rozwizania jest O(n + m), gdzie n jest liczb wierzchokw, a m jest liczb krawdzi w grae. Zoono pamiciowa jest takiego rzdu jak wielko grafu i wynosi O(n+m). Rozwizanie to moe by zaimplementowane w nastpujcy sposb:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:

73

const N MAX = 500; { Maksymalna liczba wierzchokw. } ST UNKNOWN = 0; { Brak porcze. } { Jedno porczenie = nr porczajcego dowdcy. } ST CLEAN = N MAX + 1; { Co najmniej dwa porczenia. } type t array = array [1..N MAX ] of word ; p array = t array; t ocial = record status: word ; { Licznik porcze. } cpt: boolean; { Czy jest dowdc? } vouchees no: word ; { Liczba porczanych urzdnikw. } vouchees: p array; { Porczani urzdnicy. }

74

Podpisy
14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52:

end var ocials: array [1..N MAX ] of t ocial ; { Graf. } n: word ; { Liczba wierzchokw. } procedure nd suspects; { Wyznacz wartoci licznikw porcze dla urzdnikw. } var i : word ; procedure go down (no: word ); { Przeszukiwanie grafu w gb, poczwszy od wierzchoka nr no. } var i : word ; captain: word ; begin captain := ocials[no].status; for i := 1 to ocials[no].vouchees no do with ocials[ocials[no].vouchees[i ]] do begin if (status = ST UNKNOWN ) then begin { Pierwszy raz wchodzimy do wierzchoka. } { Przepisujemy status poprzedniego wierzchoka. } status := captain; go down (ocials[no].vouchees[i ]) end else if ((status < ST CLEAN ) and (status = captain)) then begin { Znalelimy drugiego dowdc. } status := ST CLEAN ; go down (ocials[no].vouchees[i ]) end end end { go down } begin for i := 1 to n do ocials[i ].status := ST UNKNOWN ; for i := 1 to n do if ocials[i ].cpt then begin { Dowdca } ocials[i ].status := i ; go down (i ); ocials[i ].status := ST CLEAN end end

TESTY
Do sprawdzania rozwiza zawodnikw uyto 14 testw.

Podpisy
Wikszo testw ma posta: KULE(n, k, p1, p2), gdzie: (1) cay graf n-wierzchokowy jest podzielony na k rwnolicznych podgrafw (2) kady z podgrafw jest losowy, przy czym prawdopodobiestwo, e midzy danymi dwoma wierzchokami wystpuje krawd wynosi p1 (3) kady podgraf zawiera dokadnie jednego dowdc (4) kady podgraf zawiera jeden wyrniony wierzchoek, ktry nie jest dowdc (5) na wierzchokach wyrnionych znw mamy struktur grafu, tym razem z prawdopodobiestwem wystpienia krawdzi rwnym p2 (6) jeli k = 1, to dodatkowo doczepiamy do grafu gadety, ktre powoduj, e nie wszyscy urzdnicy s podejrzani (nie chcemy trywializowa testu) POD0.IN test z treci zadania POD1.IN may test poprawnociowy, POD2.IN KULE(100, 1, 0.5), POD3.IN KULE(500, 1, 0.5), POD4.IN KULE(500, 1, 0.8), POD5.IN KULE(500, 1, 1.0) - duy graf peny z gadetami, POD6.IN KULE(50, 5, 0.5, 0.2), POD7.IN KULE(200, 10, 0.8, 0.1), POD8.IN KULE(500, 5, 0.9, 0.2), POD9.IN KULE(500, 10, 1.0, 0.1), POD10.IN KULE(500, 5, 1.0, 0.3), POD11.IN KULE(500, 5, 0.8, 0.3), POD12.IN KULE(500, 2, 0.9, 0.8), POD13.IN KULE(480, 3, 0.8, 0.5).

75

Grzegorz Jakacki
autor zadania

Krzysztof Sobusiak
opracowanie, program wzorcowy

Automorzmy
Turniejem nazywamy graf skierowany, w ktrym: dla dowolnych dwch rnych wierzchokw u i v istnieje dokadnie jedna krawd pomidzy tymi wierzchokami (tzn. albo u v, albo v u), nie istniej ptle (tzn. dla dowolnego wierzchoka u nie ma krawdzi u u ). Oznaczmy przez p dowoln permutacj zbioru wierzchokw turnieju. (Permutacj skoczonego zbioru X nazywamy kad rnowartociow funkcj z X w X.) Permutacj p nazywamy automorzmem, jeeli dla dowolnych dwch rnych wierzchokw u i v zwrot krawdzi pomidzy u i v jest taki sam, jak pomidzy p( u) i p( v) (tzn. u v jest krawdzi w turnieju wtedy i tylko wtedy, gdy p( u) p( v) jest krawdzi w tym turnieju). Dla zadanej permutacji p interesuje nas, dla ilu turniejw jest ona automorzmem.

Przykad
Wemy zbir wierzchokw oznaczonych liczbami 1 , . . . , 4 oraz permutacj p: p( 1) = 2 p( 2) = 4 p( 3) = 3 p( 4) = 1 .

Istniej tylko cztery turnieje, dla ktrych ta permutacja jest automorzmem:

Zadanie
Napisz program, ktry: z pliku tekstowego AUT.IN wczyta opis permutacji n-elementowego zbioru wierzchokw, obliczy liczb t rnych n-wierzchokowych turniejw, dla ktrych ta permutacja jest automorzmem, zapisze w pliku tekstowym AUT.OUT reszt z dzielenia t przez 1 000 .

78

Automorzmy
Wejcie
1 W pierwszym wierszu pliku tekstowego AUT.IN znajduje si jedna liczba naturalna n, n 10 000 , bdca liczb wierzchokw. W kolejnych n wierszach znajduje si opis permutacji p. Zakadamy, e wierzchoki s ponumerowane liczbami od 1 do n. W wierszu ( k + 1)-szym znajduje si warto permutacji p dla wierzchoka nr k (tzn. warto p( k)).

Wyjcie
W pierwszym i jedynym wierszu pliku tekstowego AUT.OUT powinna znale si jedna liczba cakowita bdca reszt z dzielenia przez 1 000 liczby rnych n-wierzchokowych turniejw, dla ktrych permutacja p jest automorzmem.

Przykad
Dla pliku wejciowego AUT.IN: 4 2 4 3 1 poprawn odpowiedzi jest plik tekstowy AUT.OUT: 4

ROZWIZANIE
Rozwamy zbir A wszystkich nieuporzdkowanych par liczb ze zbioru {1, 2, . . . , n} kad par liczb bdziemy utosamia z par wierzchokw o odpowiednich numerach. Pokaemy, e: albo nie istnieje aden turniej, dla ktrego dana permutacja p jest automorzmem, albo wyznacza ona podzia zbioru A na rozczne podzbiory A1 , A2 , ..., As , zwane dalej gromadami, dajce w sumie zbir A i takie, e: zwrot krawdzi midzy dowoln par wierzchokw z danej gromady determinuje zwrot krawdzi midzy pozostaymi parami wierzchokw z tej gromady, zwroty krawdzi midzy parami wierzchokw nalecymi do rnych gromad mona wybra niezalenie. Szukana liczba t turniejw, dla ktrych permutacja p jest automorzmem bdzie rwna 2s , poniewa zwrot krawdzi pomidzy parami wierzchokw z jednej gromady mona ustali na 2 sposoby. Pary nalece do tej samej gromady nazwiemy parami zalenymi.

Automorzmy
Cyklem permutacji p bdziemy nazywa k-elementowy cig rnych liczb (c0 , c1 , . . . , ck1 ) taki, e ci = p(ci1 ), dla 1 i < k i c0 = p(ck1 ). atwo pokaza, e kad permutacj mona przedstawi w postaci zbioru rozcznych cykli. Dla przykadu permutacja p: p(1) = 2 p(2) = 5 p(3) = 6 p(4) = 1 p(5) = 4 p(6) = 3

79

skada si z dwch cykli: 1 2 5 4

Liczb s gromad wyznaczonych przez dan permutacj p mona szybko znale, znajc rozbicie permutacji na cykle. Wemy cykl C o dugoci k oraz nalece do niego elementy u i v. Pomy biay eton na u i czerwony eton na v. Jeli oba etony jednoczenie przesuniemy po cyklu o jeden element, to dostaniemy par zalen od {u, v}. Aby wyznaczy wszystkie takie pary powtarzamy ten ruch tak dugo, a oba etony z powrotem znajd si na pozycjach startowych u i v. Zauwamy, e jeli dugo cyklu k jest liczb parzyst i v jest odlege o k od 2 u na cyklu C, to po k/2 krokach czerwony eton znajdzie si na u, a biay na v. To oznacza sprzeczno u v jest krawdzi w turnieju wtedy i tylko wtedy, gdy v u jest krawdzi w tym turnieju. W takim przypadku nie istnieje aden turniej, dla ktrego permutacja p byaby automorzmem ostateczn odpowiedzi jest liczba 0. Dalej bdziemy zakada, e wszystkie cykle s nieparzystej dugoci. Jeli dugo cyklu jest liczb nieparzyst, to niezalenie od tego jak wybralimy u i v, do pocztkowego ustawienia etonw powrcimy po k krokach. Liczba k jest zatem licznoci dowolnej gromady zoonej z par elementw cyklu C. Zbir rnych par elementw cyklu C ma k(k 1)/2 elementw, zatem rozpada si na (k 1)/2 gromad. Niech teraz u bdzie elementem cyklu C o dugoci k, a v elementem cyklu D dugoci l. Pomy znowu biay eton na u, a czerwony na v. Aby wyznaczy pary zalene od {u, v}, podobnie jak poprzednio synchronicznie przesuwamy etony, tym razem po rozcznych cyklach. Po ilu krokach wrcimy do sytuacji pocztkowej? eton biay wraca na u po k krokach, eton czerwony wraca na v po l krokach, zatem musimy wykona N W W (k, l) krokw. Wszystkich par o jednym elemencie z C i drugim z D jest kl, a wszystkie gromady utworzone z takich par s licznoci N W W (k, l), wic mamy kl/N W W (k, l) = N W D(k, l) takich gromad. Moemy ju policzy liczb gromad, na ktre rozpada si zbir wszystkich par. Musimy najpierw wyznaczy dugoci wszystkich cykli permutacji p t operacj mona atwo zaimplementowa, by dziaaa w czasie O(n) a nastpnie posumowa liczby gromad po wszystkich parach cykli, stosujc wyej wyprowadzone wzory. Poniewa permutacja moe mie rzdu n cykli, nasz algorytm miaby zoono czasow nie lepsz ni O(n2 ). Moemy jednak poprawi ten wynik poprzez zbiorowe traktowanie cykli o identycznych dugociach. Niech ck oznacza liczb cykli o dugoci k. Wtedy sumaryczna liczba gromad utworzonych przez pary o elementach pochodzcych

80

Automorzmy
z tego samego cyklu o dugoci k wynosi z rnych cykli o dugoci k wynosi
ck (k1) , 2

ck (ck 1) 2

k,

z cykli o rnych dugociach k i l wynosi ck cl N W D(k, l). Ile moe by rnych dugoci cykli? Aby byo ich najwicej, musimy wzi po jednym cyklu o dugoci 1, 3, 5, . . ., przy czym suma dugoci cykli nie moe by wiksza od n. Poniewa 1 + 3 + 5 + . . . + 2 n n, rnych dugoci cykli jest co najwyej O( n). Do rozpatrzenia mamy zatem O(n) par grup cykli rnych dugoci. Policzenie N W D(p, q) algorytmem Euklidesa zajmuje czas O(log p + log q) czasu (jego opis Czytelnik znajdzie w [13]), zatem otrzymujemy algorytm o zoonoci czasowej O(n log n). To nie koniec zadania, gdy pozostaje nam jeszcze policzy reszt z dzielenia t = 2s przez 1000. Kolejne potgi dwjki bdziemy nalicza iteracyjnie. atwo zauway, e przy wykonywaniu kolejnych mnoe przez 2 wystarczy przechowywa jedynie reszt z dzielenia aktualnego wyniku przez 1000. Obserwacja ta jednak nie wystarcza, poniewa s moe by rzdu n2 . Zauwamy jednak, e po wystarczajco duej liczbie krokw (ale na pewno mniejszej ni 1000) tramy w kocu na warto, ktr otrzymalimy ju wczeniej. Niech i bdzie wanie takim najmniejszym wykadnikiem, e 2i mod 1000 = 2m mod 1000 dla pewnego m < i. Wtedy dla kadego j > i mamy 2j mod 1000 = (2i mod 1000) 2(ji)
mod (im)

mod 1000

Wystarczy zatem namnoy dwjk jeszcze (j i) mod (i m) razy. Aby zrealizowa ten algorytm potrzebna nam bdzie 1000-elementowa tablica, w ktrej r-tym elementem bdzie wykadnik i, dla ktrego otrzymalimy reszt r. Algorytm ten wykona co najwyej 2000 mnoe, wic jego zoono czasowa to O(1) (jest staa)!

TESTY
Do sprawdzania rozwiza zawodnikw uyto 12 testw. Testy 2 i 3 oraz 11 i 12 byy zgrupowane. Permutacje z wszystkich testw, za wyjtkiem testu 2, zawieray wycznie cykle nieparzystych dugoci. Krtki opis testw zawarty jest poniej: AUT1.IN prosty test poprawnociowy, AUT2.IN prosty test poprawnociowy z cyklem parzystej dugoci, AUT3.IN prosty test do zgrupowania z 2, AUT4.IN poprawnociowy test losowy, permutacja 50-elementowa o 4 cyklach, AUT5.IN test poprawnociowy, permutacja 501-elementowa o jednym cyklu, AUT6.IN wydajnociowy test losowy, permutacja 10000-elementowa o 100 cyklach,

Automorzmy
AUT7.IN wydajnociowy test losowy, permutacja o 100 cyklach dugoci 1, 3, 5, . . ., 199, AUT8.IN wydajnociowy test losowy, permutacja 5000-elementowa o 4500 cyklach, AUT9.IN wydajnociowy test losowy, permutacja 10000-elementowa o 5000 cyklach, AUT10.IN wydajnociowy test losowy, permutacja 10000-elementowa o 8000 cyklach, AUT11.IN 10000-elementowa permutacja identycznociowa, AUT12.IN prosty test do zgrupowania z 11.

81

Wojciech Rytter
autor zadania, opracowanie

Tomasz Wale
program wzorcowy

Trjramienny dwig
Trjramienny dwig ustawia kontenery na wagonach kolejowych. Wagony s ponumerowane kolejno 1 , 2 , . . .. Na kadym wagonie mona postawi co najwyej jeden kontener. W jednym ruchu dwig pobiera ze skadowiska trzy kontenery i ustawia je na wagonach o numerach i, i + p oraz i + p + q, albo na wagonach o numerach i, i + q oraz i + p + q (dla pewnych staych p, q 1 ). Dwig trzeba zaprogramowa tak, eby zaadowa kontenerami pierwsze n wagonw pocigu (pocig ma n+ p+ q wagonw). Program skada si z cigu instrukcji. Kada z instrukcji opisuje jeden ruch dwigu. Instrukcja programu ma posta trjki ( x, y, z), gdzie 1 x < y < z n + p + q, i okrela numery wagonw, na ktre dwig ma ustawi kontenery. Jeeli po wykonaniu programu na kadym spord n pierwszych wagonw pocigu znajduje si dokadnie jeden kontener, to mwimy, e program jest poprawny.

Zadanie
Napisz program, ktry: z pliku tekstowego TRO.IN wczyta charakterystyk dwigu (liczby p i q) oraz liczb wagonw do zaadowania (n), wygeneruje poprawny program dla dwigu, zapisze go do pliku tekstowego TRO.OUT.

Wejcie
W pierwszym i jedynym wierszu pliku tekstowego TRO.IN znajduj si dokadnie trzy dodatnie liczby cakowite pooddzielane pojedynczymi odstpami. S to odpowiednio: liczby p i q okrelajce parametry dwigu oraz liczba n, bdca liczb pocztkowych wagonw pocigu do zaadowania. Liczby te speniaj nierwnoci 1 n 300 000 , 2 p + q 60 000 .

Wyjcie
W pierwszym wierszu pliku tekstowego TRO.OUT powinna znajdowa si dokadnie jedna liczba cakowita m bdca liczb instrukcji w wygenerowanym programie. W kadym z kolejnych m wierszy powinny znajdowa si dokadnie trzy liczby naturalne x, y, z pooddzielane pojedynczymi odstpami, 1 x < y < z n + p + q, x n, y {x + p, x + q}, z = x + p + q. S to numery wagonw, na ktre dwig ma pooy kontenery w kolejnym ruchu.

Przykad
Dla pliku wejciowego TRO.IN: 2 3 10

84

Trjramienny dwig
poprawn odpowiedzi jest plik tekstowy TRO.OUT: 4 1 3 6 2 4 7 5 8 10 9 11 14

ROZWIZANIE
Przyjmijmy, e p q. Ruch typu i, i + p, i + p + q nazwijmy ruchem typu 1, a i, i + q, i + p + q ruchem typu 2, gdzie i jest najmniejszym numerem wolnego wagonu.

Opis algorytmu Rozwizanie polega na wykonywaniu tak dugo jak to moliwe, ruchw typu 1, a gdy to nie jest moliwe ruchu typu 2. Okazuje si, e takie rozwizanie zawsze generuje prawidowy program. Zoono czasowa takiego algorytmu wynosi O(n + p + q), pamiciowa O(p + q).
Rys. 1 Przykadowa historia dziaania dwigu trjramiennego. W kade pole wpisany jest kolejny numer ruchu, w ktrym to pole zostaje zajte. Jedynie 7-my ruch jest typu 2.

ruch typu 1 ruch typu 2

Na przykad, jeli charakterystyk dwigu jest (3, 10) oraz n = 16, to jeden z moliwych programw dwigu jest przedstawiony na rysunku 1.

Dowd poprawnoci Zamy, e dla pewnego wagonu i = s po raz pierwszy nie mona wykona adnego z ruchw. atwo zauway, e wagon i+p+q jest wolny. Rwnie s jest wolny, natomiast s + p, s + q s zajte, poniewa nie mona wykona ruchu. Wagon s + q zosta zajty w czasie wykonywania ruchu typu 2 dla pozycji j = s p. Ale z tego wynika, e w momencie wykonywania ruchu dla i = j wolne byy i, j + p, j + p + q, zatem mona byo wykona ruch typu 1, ktry ma priorytet i zaj pozycje j, s, s + q. Pozycja s nie moe by zatem wolna sprzeczno.

Trjramienny dwig
Obserwacja Mona si zastanowi nad podobnym problem dla dwigu czteroramiennego. Jest to trudne zadanie, poniewa najpierw dla danego n trzeba sprawdzi, czy w ogle istnieje odpowiedni program dwigu nie kady cig kolejnych n liczb da si wtedy pokry. Na przykad nie ma pokrycia dla n = 3 i dwigu o charakterystyce (1, 2, 1), tzn. takiego ktry zapenia wagony i, i + 1, i + 3, i + 4.

85

TESTY
Do sprawdzania rozwiza zawodnikw uyto 24 testw, ktrych charakterystyki znajduj si poniej. Test 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 p 2 2 2 2 5 2 2 10 20 20 20 20 50 68 123 1234 1000 2000 10000 10001 17777 20000 25000 35000 q 3 3 3 3 2 5 5 20 10 10 20 20 67 37 1234 123 2000 1000 10001 10000 20000 17777 35000 25000 n 10 5 12 20 10 20 30 30 5 30 20 100 100 200 1000 2000 10000 20000 20000 30000 50000 60000 200000 300000

Nastpujce testy zostay zgrupowane: (1,2 i 3), (4,5 i 6), (7,8 i 9), (10 i 11), (12 i 13), (14 i 15), (16 i 17), (18 i 19), (20 i 21), (22 i 23).

Wojciech Guzicki
autor zadania, opracowanie

Marcin Mucha
program wzorcowy

Kod
Drzewo binarne moe byc puste, albo skada sie z wierzchoka, do ktrego przyczepione s dwa drzewa, tzw. lewe i prawe poddrzewo. W kadym wierzchoku zapisana jest jedna litera alfabetu angielskiego. Wierzchoek drzewa, ktry nie znajduje si w adnym poddrzewie, nazywamy korzeniem. Mwimy, e drzewo jest binarnym drzewem poszukiwa (BST), jeeli dla kadego wierzchoka speniony jest warunek, mwicy, e wszystkie litery z lewego poddrzewa wierzchoka wystpuj w alfabecie wczeniej, ni litera zapisana w wierzchoku, natomiast wszystkie litery z prawego poddrzewa pniej. Kodem drzewa BST nazywamy: cig pusty (0-elementowy), gdy drzewo jest puste, cig liter zaczynajcy si od litery zapisanej w korzeniu drzewa, po ktrym nastpuje kod lewego poddrzewa, a nastpnie kod prawego poddrzewa. Rozwamy wszystkie k-wierzchokowe drzewa BST, w wierzchokach ktrych umieszczono pocztkowe k liter alfabetu angielskiego. Wyobramy sobie list kodw tych drzew, wypisanych w kolejnoci alfabetycznej. (n,k)-kodem nazywamy n-ty kod na tej licie.

Przykad
Istnieje dokadnie 14 kodw 4-wierzchokowych binarnych drzew poszukiwa, konkretnie (w kolejnoci alfabetycznej): abcd abdc acbd adbc adcb bacd badc cabd cbad dabc dacb dbac dcab dcba Napis badc jest (7,4)-kodem i odpowiada mu nastpujce drzewo BST:

b a c d

Zadanie
Napisz program, ktry: z pliku tekstowego KOD.IN wczyta liczby n i k, wyznaczy ( n, k)-kod, zapisze go do pliku tekstowego KOD.OUT.

88

Kod
Wejcie
W pierwszym i jedynym wierszu pliku tekstowego KOD.IN zapisane s dokadnie dwie dodatnie liczby cakowite n i k, oddzielone pojedynczym znakiem odstpu, 1 k 19 . Liczba n nie przekracza liczby kodw drzew BST o k wierzchokach.

Wyjcie
W pierwszym i jedynym wierszu pliku tekstowego KOD.OUT powinno znajdowa si sowo zoone z maych liter alfabetu angielskiego bdce ( n, k)-kodem.

Przykad
Dla pliku wejciowego KOD.IN: 11 4 poprawn odpowiedzi jest plik tekstowy KOD.OUT: dacb

ROZWIZANIE
Zastanwmy si najpierw, ile jest drzew binarnych o zadanej liczbie wierzchokw. Oznaczmy przez Ck liczb drzew majcych k wierzchokw. Oczywicie C0 = 1: tylko drzewo puste ma zero wierzchokw. Rwnie jest tylko jedno drzewo majce jeden wierzchoek, zatem C1 = 1. Niech teraz k bdzie liczb naturaln wiksz od jednoci. Drzewo majce k wierzchokw skada si z korzenia, do ktrego przyczepione s dwa poddrzewa majce cznie k 1 wierzchokw. Mamy wic k moliwoci: Przypadek 0. Lewe poddrzewo ma 0 wierzchokw, prawe ma k 1 wierzchokw (takich drzew jest oczywicie C0 Ck1 ). Przypadek 1. Lewe poddrzewo ma 1 wierzchoek, prawe ma ich k 2 (takich drzew jest C1 Ck2 ); ... Przypadek k 1. Lewe poddrzewo ma k 1 wierzchokw, prawe ma 0 wierzchokw (takich drzew jest Ck1 C0 ). Std otrzymujemy nastpujcy wzr rekurencyjny na liczb drzew:
k1

Ck = C0 Ck1 + C1 Ck2 + . . . + Ck1 C0 =


i=0

Ci Cki1 .

Liczby Ck nazywamy liczbami Catalana. Wystpuj one w wielu innych zadaniach kombinatorycznych. Na przykad:

Kod
Liczba funkcji niemalejcych f : {1, 2, . . . , n} {1, 2, . . . , n}, tzn. takich, e jeli k l, to f (k) f (l) dla dowolnych k, l {1, 2, . . . , n} i speniajcych warunek f (k) k, dla kadego k {1, 2, . . . , n}, jest rwna Cn .

89

Liczba rnych triangulacji (czyli sposobw podziau przektnymi na trjkty) wielokta wypukego majcego n bokw jest rwna Cn2 .

Przypumy, e mamy dane dziaanie dwuargumentowe i rozwaamy wyraenie postaci x1 x2 . . . xn . W tym wyraeniu moemy rozstawi nawiasy (tak, by zawsze wykonywa dziaanie na dwch argumentach) na wiele sposobw. Na przykad, dla n = 4 mamy nastpujce sposoby: (x1 x2 ) (x3 x4 ), ((x1 x2 ) x3 ) x4 , x1 (x2 (x3 x4 )), (x1 (x2 x3 )) x4 , x1 ((x2 x3 ) x4 . Liczba rnych sposobw rozstawienia nawiasw jest rwna Cn1 . Inaczej mwic, jeli dziaanie jest nieczne (przykadem takiego dziaania jest dzielenie liczb rzeczywistych dodatnich), to wykonujc to dziaanie na wszystkie moliwe sposoby, z zachowaniem kolejnoci x1 , x2 , . . . , xn , moemy otrzyma co najwyej Cn1 rnych wynikw.

Liczby Catalana wystpuj rwnie jako rozwizania nastpujcego zadania: w kolejce do kina stoi 2n osb, n z nich ma tylko 5 zotych, kada z pozostaych ma tylko banknot dziesiciozotowy. Bilet kosztuje 5 zotych. W kasie nie ma pienidzy, wic moe si okaza, e w ktrym momencie kasjerka nie bdzie moga wyda reszty kolejnej osobie (na przykad, jeli pierwsza osoba ma 5 zotych, a dwie nastpne po 10 zotych, to trzecia osoba nie otrzyma reszty i kolejka si zatrzyma). Okazuje si, e liczba sposobw ustawienia osb w kolejce tak, by wszyscy mogli kupi bilety, jest rwna Cn .

Czytelnikowi zainteresowanemu kombinatoryk polecamy ksiki W. Lipski, W. Marek Analiza kombinatoryczna i V. Bryant Aspekty kombinatoryki, z ktrych mona dowiedzie si wicej o liczbach Catalana.

90

Kod
Podany wyej wzr rekurencyjny pozwala obliczy kolejne liczby Catalana. Pocztkowe liczby Catalana s rwne odpowiednio: C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 = 1, = 1, = 2, = 5, = 14, = 42, = 132, = 429, = 1430, = 4862, = 16796.

Znany jest te wzr oglny na k-t liczb Catalana. Mianowicie Ck = 1 2k . k+1 k

W programie wzorcowym liczby Catalana s obliczane za pomoc wzoru rekurencyjnego. Teraz opiszemy algorytm znajdowania (n, k)-kodu drzewa binarnego. Najpierw wyjanimy istot dziaania tego algorytmu na przykadzie. Przyjmijmy k = 10 i n = 8751. Wiemy ju, e istnieje 16796 drzew binarnych majcych 10 wierzchokw. Ta liczba jest sum nastpujcych 10 liczb: 1. liczby C0 C9 , rwnej 4862; jest to liczba tych drzew, w ktrych lewe poddrzewo ma 0 wierzchokw, a prawe 9 wierzchokw; s to dokadnie te drzewa binarne, ktre maj w korzeniu umieszczon liter a; 2. liczby C1 C8 , rwnej 1430; jest to liczba tych drzew, w ktrych lewe poddrzewo ma 1 wierzchoek, a prawe 8 wierzchokw; s to drzewa, ktre maj w korzeniu umieszczon liter b; 3. liczby C2 C7 , rwnej 858; jest to liczba tych drzew, w ktrych lewe poddrzewo ma 2 wierzchoki, a prawe 7 wierzchokw; s to drzewa, ktre maj w korzeniu umieszczon liter c; ... 10. liczby C9 C0 , rwnej 4862; jest to liczba tych drzew, w ktrych lewe poddrzewo ma 9 wierzchoki, a prawe 0 wierzchokw; s to drzewa, ktre maj w korzeniu umieszczon liter j. Kody wszystkich drzew z grupy pierwszej poprzedzaj oczywicie w porzdku alfabetycznym kody drzew z grupy drugiej, te z kolei poprzedzaj kody drzew w

Kod
grupy trzeciej itd. Zauwamy teraz, e czna liczba kodw zaczynajcych si od liter a, b, c, d, e jest rwna 8398 (czyli mniej ni 8751), a jeli dopucimy jeszcze liter f, to liczba kodw wyniesie 8986 (a wic wicej ni 8751). Std wynika, e pierwsz liter kodu jest f. Po niej nastpi litery od a do e (w nieznanej jeszcze kolejnoci) i na kocu litery od g do j (rwnie w nieznanej kolejnoci). W ten sposb ustalilimy pierwsz liter kodu drzewa. Nastpnie bdziemy chcieli ustali kody obu poddrzew. W tym celu obliczymy kolejne numery tych kodw i rekurencyjnie znajdziemy same kody. Kademu z C5 kodw zoonych z liter od a do e na pocztku odpowiada C4 kodw zoonych z liter od g do j na kocu. Mamy znale 353-ci z kolei kod rozpoczynajcy si liter f (gdy 8751 8398 = 353). Kademu kodowi lewego poddrzewa odpowiada 14 kodw prawych poddrzew. Ale 352 = 2514+2. Std wynika, e odcinek pocztkowy naszego kodu (po literze f) ma by dwudziestym szstym z kolei kodem skadajcym si z liter od a do e, a odcinek kocowy ma by trzecim z kolei kodem skadajcym si z liter od g do j. Jest tak dlatego, e pierwszym dwudziestu piciu kodom lewych poddrzew odpowiada tylko 25 14 czyli 350 kodw caych drzew. Nasz kod ma wic by trzecim kodem z nastpnej, tzn. dwudziestej szstej grupy. Powstaje pytanie, dlaczego dzielimy 352, a nie 353. Mianowicie mamy proste wzory oglne na numer grupy (czyli numer kodu lewego poddrzewa) i numer w tej grupie (czyli numer kodu prawego poddrzewa): przypumy, e nasz kod ma by m-tym kodem zaczynajcym si od pewnej znanej ju litery c (w naszym przypadku c = f); znamy wic wielkoci obu poddrzew: niech lewe skada si z l wierzchokw, a prawe z p wierzchokw. Wtedy lewe poddrzewo ma numer (m1) div Cp +1, a prawe (m1) mod Cp +1. Kontynuujc obliczenia w naszym przykadzie zauwaymy, e odcinek pocztkowy kodu zaczyna si liter d, po ktrej nastpuje trzeci kod skadajcy si z liter a, b, c i jedyny kod skadajcy si z litery e. Odcinek kocowy zaczyna si liter g, po ktrej nastpuje trzeci kod skadajcy si z liter h, i, j. Ostatecznie otrzymamy kod fdbacegihj. Teraz ju nietrudno napisa odpowiedni algorytm rekurencyjny. Gwna funkcja wyznaczajca (n, k)-kod ma w nim posta nastpujc. Argumentami funkcji s: litera cp, od ktrej zaczynaj si litery umieszczone w wierzchokach drzewa (bdzie to potrzebne w przypadku prawego poddrzewa, w ktrym wystpuj litery nie od pocztku alfabetu), numer n drzewa i liczba wierzchokw k. W tablicy Catalan umieszczone s oczywicie liczby Catalana, obliczone wczeniej za pomoc wzoru rekurencyjnego. Na pocztku funkcja zwraca wartoci w przypadkach najprostszych: kod pusty dla drzewa pustego i kod jednoliterowy cp dla drzewa skadajcego si z jednego wierzchoka. Dla drzew wikszych obliczamy w ptli sum iloczynw liczb Catalana dotd, a przekroczy ona n. Zauwamy, e wartoci zmiennych l i p s wtedy rwne dokadnie liczbom wierzchokw w lewym i prawym poddrzewie. Korze otrzymujemy znajdujc liter stojc w alfabecie o l miejsc dalej od cp. Potem zgodnie z powyszymi wzorami znajdujemy numery lewego i prawego poddrzewa i dwukrotnie wywoujemy

91

92

Kod
procedur rekurencyjnie. Otrzymane kody drzew czymy wreszcie ze znalezionym wczeniej korzeniem. Oto tre tej procedury:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:

function Kod (cp : char ; n : longint; k : integer ) : String; { cp : litera pocztkowa kodu drzewa; n : numer kodu drzewa wrd drzew majcych wierzchoki oznaczone literami poczwszy od cp zakadamy, e liczba n nie przekracza liczby Catalana C [k ]; k : liczba wierzchokw drzewa} var l ,p : integer ; {liczba wierzchokw w lewym i prawym poddrzewie} Suma : longint; {suma iloczynw liczb Catalana} SumaPoprzednia : longint; m : longint; n1 ,n2 : longint; {numery lewego i prawego poddrzewa} znak : char ; begin if (k =0) then Kod := else if (k =1) then Kod :=cp else begin Suma:=0; l :=1; p:=k ; repeat l :=l +1; p:=p-1; SumaPoprzednia:=Suma; Suma:=Suma+Catalan[l ]*Catalan[p]; until (Suma n); znak :=chr (ord (cp)+l); m:=n-SumaPoprzednia; n1 :=((m-1) div Catalan[p])+1; n2 :=((m-1) mod Catalan[p])+1; Kod :=znak +Kod (cp,n1 ,l )+Kod (succ(znak ),n2 ,p) end end;

Ten najprostszy program zamieszczony jest w pliku o nazwie kod0.pas. Nie jest on jednak optymalny. Mona zauway, e pewne obliczenia s wykonywane wielokrotnie, na przykad sumowanie iloczynw liczb Catalana. Te iloczyny i ich sumy mona obliczy wczeniej i umieci w tablicy. Tak napisany program znajduje si w pliku kod.pas. Ograniczenie k = 19 wynika z wielkoci liczb Catalana. Liczba C19 = 1767263190 mieci si jeszcze w zakresie liczb typu longint.

Kod TESTY
Do sprawdzania rozwiza zawodnikw uyto 17 testw: KOD0.IN test z treci zadania, KOD1.IN n = 3, k = 3, KOD2.IN n = 42, k = 5, KOD3.IN n = 1, k = 6, KOD4.IN n = 2000, k = 9, KOD5.IN n = 50000, k = 11, KOD6.IN n = 200000, k = 13, KOD7.IN n = 1000000, k = 15, KOD8.IN n = 20000000, k = 17, KOD9.IN n = 100000000, k = 18, KOD10.IN n = 400000000, k = 19, KOD11.IN n = 800000000, k = 19, KOD12.IN n = 100, k = 19, KOD13.IN n = 1767263190, k = 19, KOD14.IN n = 1111111111, k = 19, KOD15.IN n = 1234567890, k = 19, KOD16.IN n = 608197699, k = 19.

93

Marcin Kubica
autor zadania, opracowanie

Krzysztof Sobusiak
program wzorcowy

Labirynt studni
Wewntrz Bajtogry znajduje si mityczny labirynt studni. Wejcie do labiryntu znajduje si na szczycie gry. Labirynt skada si z wielu komnat. Kada z nich jest w jednym z trzech kolorw: czerwonym, zielonym lub niebieskim. Dwie komnaty tego samego koloru wygldaj identycznie i s nieodrnialne. W kadej komnacie znajduj si trzy studnie oznaczone numerami 1, 2 i 3. Midzy komnatami mona porusza si tylko w jeden sposb wskakujc do jednej ze studni spada si (niekoniecznie pionowo) do jednej z komnat pooonych niej. Z komnaty, w ktrej znajduje si wejcie do labiryntu mona przedosta si w ten sposb do kadej z pozostaych komnat. Wszystkie drogi przez labirynt prowadz do smoczej jamy znajdujcej si na samym jego dnie. Kademu przejciu przez labirynt odpowiada cig numerw studni wybieranych w kolejno odwiedzanych komnatach. Cig ten nazywa si planem podry. W smoczej jamie yje Bajtosmok. Legenda gosi, e ten, kto przedstawi Bajtosmokowi dokadny plan labiryntu, otrzyma wielkie skarby. Wszystkich innych Bajtosmok potnym kopniciem wyprasza z wntrza gry. miaek o imieniu Bajtazar wielokrotnie przemierza labirynt i opracowa jego map. Jednak Bajtosmok orzek, e co prawda wszystkie komnaty znajduj si na mapie, ale wiele komnat jest na niej powtrzonych. Ja te powiedzia poklepujc Bajtazara po ramieniu projektujc labirynt narysowaem podobny rysunek, ale szybko stwierdziem, e komnat mona zrobi o wiele mniej, a go poruszajcy si wedug dowolnego planu podry i tak bdzie oglda takie same sekwencje komnat. Pomylaem troch i maksymalnie zredukowaem projekt.

Zadanie
Napisz program, ktry: wczyta map Bajtazara z pliku tekstowego LAB.IN, obliczy prawdziw liczb komnat w labiryncie, zapisze wynik do pliku tekstowego LAB.OUT.

Wejcie
W pierwszym wierszu pliku tekstowego LAB.IN zapisana jest jedna liczba cakowita n, 2 n 6 000 , bdca liczb komnat (cznie ze smocz jam). Komnaty s ponumerowane od 1 do n tak, e komnaty o wikszych numerach znajduj si niej (komnata, w ktrej znajduje si wejcie do labiryntu ma numer 1, a smocza jama ma numer n). W kolejnych n1 wierszach pliku s opisane komnaty (poza smocz jam) oraz studnie prowadzce od nich w d. W kadym z tych wierszy znajduje si litera, po niej jeden znak odstpu, a nastpnie trzy liczby cakowite oddzielone pojedynczymi odstpami. Litera oznacza kolor komnaty (C czerwony, Z zielony, N niebieski), a i-ta liczba (dla i = 1 , 2 , 3 ) jest numerem komnaty, do ktrej prowadzi i-ta studnia.

96

Labirynt studni
Wyjcie
W pierwszym i jedynym wierszu pliku tekstowego LAB.OUT powinna znale si dokadnie jedna liczba cakowita bdca minimaln liczb komnat w labiryncie (cznie ze smocz jam), przy ktrej podrnik poruszajcy si wedug dowolnego planu obserwuje tak sam sekwencj komnat, jak dla labiryntu opisanego w pliku wejciowym.

Przykad
Dla pliku wejciowego LAB.IN: 11 N 3 5 2 Z 4 5 6 N 7 11 9 N 8 11 10 C 11 9 9 Z 11 9 10 C 11 11 11 C 11 11 11 Z 11 11 11 Z 11 11 11 opisujcego nastpujcy labirynt:

1N
3

2Z
2

5C 3N
3

6Z
2,3
2
1
1

4N

9Z
1 1,2, 3
1
,3 1,2
2

8C
3

7C
1,2

,3

1,2,3

10Z

11

poprawn odpowiedzi jest plik tekstowy LAB.OUT: 8

Labirynt studni ROZWIZANIE


Sformuujmy to zadanie w terminologii grafowej. Plan labiryntu to multigraf* skierowany bez cykli jego wierzchoki reprezentuj komnaty, a krawdzie reprezentuj studnie. Kady wierzchoek (z wyjtkiem smoczej jamy) jest pokolorowany jednym z trzech kolorw: czerwonym, zielonym lub niebieskim. Z kadego wierzchoka wychodz po trzy krawdzie etykietowane liczbami 1, 2 i 3, z wyjtkiem smoczej jamy, z ktrej nie wychodz adne krawdzie. Dla kadego wierzchoka na planie istnieje cieka prowadzca do niego z wierzchoka reprezentujcego wejcie do labiryntu. Podobnie, dla kadego wierzchoka istnieje cieka prowadzca z niego do smoczej jamy. Kadej ciece prowadzcej z wejcia do labiryntu do smoczej jamy odpowiada plan podry, bdcy cigiem etykiet krawdzi tworzcych dan ciek, oraz cig kolorw wierzchokw tworzcych t ciek. Rwnoczenie plan podry wyznacza jednoznacznie odpowiadajc mu ciek czc wejcie do labiryntu ze smocz jam. Moemy powiedzie, e dwa plany labiryntw s sobie rwnowane, jeeli: maj one takie same zbiory moliwych planw podry, oraz dla kadego z tych planw podry, odpowiadajce im w obu multigrafach cieki czce wejcia do labiryntw ze smoczymi jamami, charakteryzuj si takimi samymi sekwencjami kolorw wierzchokw. Zadanie polega na znalezieniu planu labiryntu o najmniejszej liczbie wierzchokw, rwnowanego zadanemu planowi. Zastanwmy si, jak mgby wyglda taki minimalny plan. Przez gboko wierzchoka oznaczamy dugo najduszej cieki prowadzcej z tego wierzchoka do smoczej jamy. Przyjmujemy, e smocza jama ma gboko 0. Zbir wszystkich wierzchokw o danej gbokoci nazywamy warstw. Powiedzielimy, e kadej ciece czcej wejcie do labiryntu ze smocz jam odpowiada pewien plan podry i jednoczenie ten plan podry jednoznacznie wyznacza t ciek. Fakt ten mona uoglni. Kadej ciece moemy przyporzdkowa jej plan bdcy cigiem etykiet krawdzi tworzcych t ciek. Rwnoczenie taki plan, wraz z pocztkowym wierzchokiem, wyznacza jednoznacznie t ciek. Charakterystyk cieki bdziemy nazywa par zoon z planu cieki oraz cigu kolorw wierzchokw tworzcych t ciek. Dla kadego wierzchoka deniujemy jego charakterystyk, jako zbir charakterystyk wszystkich cieek prowadzcych z tego wierzchoka do smoczej jamy. Zauwamy, e wierzchoki majce tak sam charakterystyk nale do tej samej warstwy. Ponadto, jeli z wierzchokw o takiej samej charakterystyce przejdziemy rwnoczenie wzdu krawdzi o takiej samej etykiecie, to dojdziemy do wierzchokw o takiej samej charakterystyce. Tak wic, w szukanym planie nie moe by dwch wierzchokw o takiej samej charakterystyce gdyby byy, to moglibymy sklei ze sob dwa wierzchoki o takiej samej charakterystyce i minimalnej gbokoci, uzyskujc plan labiryntu rwnowany danemu, ale o mniejszej liczbie wierzchokw. Ponadto, dla dowolnego wierzchoka v w danym planie labiryntu i dla dowolnej cieki * Multigraf rni si tym od grafu, e moe mie wiele krawdzi czcych t sam par wierzchokw.

97

98

Labirynt studni
prowadzcej od wejcia do labiryntu do v, w szukanym planie istnieje cieka o takiej samej charakterystyce, prowadzca od wejcia do labiryntu do wierzchoka o takiej samej charakterystyce, jak charakterystyka v. Wynika std, e szukany plan labiryntu moemy uzyska sklejajc wierzchoki o takich samych charakterystykach. Sklejajc wierzchoki nie musimy wyznacza ich charakterystyk. Moemy skorzysta z nastpujcego prostego faktu. Niech v i w bd dwoma wierzchokami o gbokoci h. Jeeli wszystkie wierzchoki o gbokociach mniejszych od h maj rne charakterystyki, to v i w maj takie same charakterystyki wtedy i tylko wtedy, gdy krawdzie o takich samych etykietach, wychodzce z v i w prowadz do takich samych wierzchokw. Fakt ten wynika bezporednio z denicji charakterystyki. Tak wic, najlepiej skleja wierzchoki o tych samych charakterystykach z kolejnych warstw o rosncych gbokociach. Nasze rozwizanie skada si z dwch faz: podzielenia wierzchokw na warstwy i sklejania wierzchokw z kolejnych warstw. Jak jednak podzieli wierzchoki na warstwy? Moemy posuy si tu algorytmem podobnym do sortowania topologicznego. Warstwy wyznaczamy w kolejnoci rosncych gbokoci. W momencie, gdy wstawiamy jaki wierzchoek do warstwy, to przegldamy wszystkie krawdzie wchodzce do tego wierzchoka. Jeeli wszystkie trzy krawdzie wychodzce z ktregokolwiek wierzchoka zostan przejrzane, to moemy wstawi ten wierzchoek do warstwy o gbokoci o jeden wikszej od gbokoci wierzchoka, do ktrego prowadzi ostatnia przejrzana krawd. Z kadym wierzchokiem moemy mie zwizany licznik, ktry pocztkowo jest rwny 3. Wwczas przejrzenie krawdzi polega na zmniejszeniu o 1 licznika zwizanego z wierzchokiem, z ktrego dana krawd wychodzi. Gdy licznik osignie 0, to wszystkie krawdzie wychodzce z danego wierzchoka zostay przejrzane. Do zaimplementowania opisanego algorytmu moe by przydatna nastpujca struktura danych. Dla kadego wierzchoka pamitamy jego kolor, krawdzie wychodzce z tego wierzchoka, krawdzie wchodzce do tego wierzchoka oraz pewne dodatkowe informacje potrzebne w trakcie sklejania wierzchokw, ktre omwimy dalej.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:

const MAXN = 6000; { Maksymalna liczba wierzchokw. } type PElem = TElem; { Listy nieujemnych liczb cakowitych. } TElem = record l : Word ; nast: PElem end TKolejka = record { Kolejki nieujemnych liczb cakowitych. } pocz , kon: PElem end TListy = array [0..MAXN ] of PElem; { Tablica list. } TKolejki = array [1..MAXN ] of TKolejka; { Tablica kolejek. } var n: Word ; { Liczba wierzchokw. } V : array [1..MAXN ] of record { Wierzchoki. } kolor : Byte; { Kolor. }

Labirynt studni
17: 18: 19: 20: 21:

99

numer : Word ; { Numeracja uywana przy sklejaniu wierzchokw. } dol : array [1..3] of Word { Krawdzie wychodzce z wierzchokw. } end Gora: TListy; { Krawdzie prowadzce do wierzchokw. } Warstwy: TListy; { Warstwy o kolejnych gbokociach. }

Zwrmy uwag, e ze wzgldu na ograniczon wielko pojedynczej tablicy, dane o wierzchokach s pamitane w trzech tablicach. Funkcja dzielca wierzchoki na warstwy wyglda nastpujco:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:

procedure Wstaw (var L: PElem; i : Word ); { Wstawia liczb i na pocztek listy L. } . . . function WyznaczWarstwy: Word ; { Wyznacza warstwy, w wyniku daje liczb warstw. } var i , gleb: Word ; P , Q: PElem; T : array [0..MAXN ] of Byte; { Liczby nieodwiedzonych krawdzi. } begin for i := 0 to n do begin Warstwy[i ] := nil ; T [i ] := 3 end; Wstaw (Warstwy[0], n); gleb := 0; { Gboko aktualnie przetwarzanej warstwy. } while Warstwy[gleb] = nil do begin { Wyznacz kolejne warstwy. } P := Warstwy[gleb]; while P = nil do begin { Przejrzyj wszystkie wierzchoki warstwy. } i := P .l ; Q := Gora[i ]; while Q = nil do begin { Przejrzyj wszystkie krawdzie wchodzce do danego } { wierzchoka. } Dec(T [Q.l ]); if T [Q.l ] = 0 then Wstaw (Warstwy[gleb+1], Q.l ); { Wierzchoek, z ktrego prowadzi krawd, } { naley do nastpnej warstwy. } Q := Q.nast end; P := P .nast end; Inc(gleb)

100

Labirynt studni
37: 38: 39:

end; WyznaczWarstwy := gleb-1 end;

Kady wierzchoek jest raz wstawiany do swojej warstwy i raz przegldany. Kada krawd jest przegldana dokadnie raz. Tak wic zoono czasowa pierwszej fazy algorytmu jest rzdu n, gdzie n jest liczb wierzchokw. Druga faza algorytmu polega na sklejaniu w kolejnych warstwach wierzchokw o takich samych charakterystykach. Kademu wierzchokowi moemy przyporzdkowa kod postaci k, v1 , v2 , v3 , gdzie k to kolor wierzchoka, a v1 , v2 , v3 , to wierzchoki, do ktrych prowadz krawdzie wychodzce z danego wierzchoka. Przetwarzajc wierzchoki z kolejnej warstwy sklejamy wierzchoki o takich samych kodach. Jak jednak wyznaczy, ktre wierzchoki maj takie same kody? Moemy skorzysta ze struktury sownikowej (dowolnego rodzaju, o dostpie w czasie logarytmicznym) w momencie, gdy wstawiamy do struktury kod, ktry ju w nim jest, to odpowiednie wierzchoki naley sklei. W ten sposb wyznaczenie wierzchokw do sklejenia wymaga czasu O(n log n), gdzie n jest liczb wierzchokw. Jeeli zamiast sownika o dostpie w czasie logarytmicznym uyjemy tablicy haszujcej, to moemy uzyska oczekiwany czas O(n). Mona jednak wyznaczy wierzchoki do sklejenia w pesymistycznym czasie (n). Oznaczmy przez h gboko wierzchoka z wejciem do labiryntu, przez ni oznaczmy liczb wierzchokw w warstwie gbokoci i. Zauwamy, e n0 = nh = 1 oraz h ni = n. W i-tym kroku drugiej fazy algorytmu sklejamy w i-tej warstwie wierzi=0 choki o takich samych kodach. Z i-tej warstwy wychodzi 3ni krawdzi prowadzcych do co najwyej 3ni wierzchokw. Wierzchoki te moemy wyznaczy i ponumerowa w czasie rzdu ni . W kodach wierzchokw z i-tej warstwy wierzchoki, do ktrych prowadz krawdzie moemy reprezentowa za pomoc numerw w tej numeracji. Wwczas moemy posortowa kody leksykogracznie w czasie rzdu ni . Oto fragment programu realizujcy sortowanie kodw wierzchokw i-tej warstwy. Zakadamy, e pocztkowo wszystkie wierzchoki maj zainicjowane pola numer na 0, oraz e kuby s zainicjowane na puste kolejki.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:

var num, i , j : Word ; P , Q, W : PElem; Kubly : TKolejki ; { Kubeki do sortowania leksykogracznego. } procedure Przerzuc(var K : TKolejka; var L: PElem); { Przerzuca pierwszy element listy L na koniec kolejki K . } . . . function ScalKubly(maxnum: Word ): PElem; { czy kolejki z kubekw o numerach [1..maxnum] w jedn list. } . . . begin num := 0; W := Warstwy[i ]; P := W ; while P = nil do begin

Labirynt studni
15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:

101

{ Ponumeruj wszystkie wierzchoki, do ktrych prowadz } { krawdzie z i-tej warstwy. } for j := 1 to 3 do with V [V [P .l ].Dol [j ]] do if numer = 0 then begin Inc(num); numer := num end P := P .nast end { Sortuj leksykogracznie po numerach wierzchokw, } { do ktrych prowadz krawdzie z i-tej warstwy. } for j := 3 downto 1 do begin while W = nil do Przerzuc(Kubly[V [V [W .l ].Dol [j ]].numer ], W ); W := ScalKubly(num) end { Sortuj po kolorach wierzchokw. } while W = nil do Przerzuc(Kubly[V [W .l ].kolor ], W ); Warstwy[i ] := ScalKubly(3); end

Po posortowaniu, takie same kody bd ssiadowa ze sob wystarczy wic przejrze je w kolejnoci posortowania i sklei wierzchoki o takich samych kodach. Sklejajc kilka wierzchokw, do wybranego wierzchoka doklejamy pozostae. Doklejajc jeden wierzchoek do drugiego musimy poprawi krawdzie prowadzce do pierwszego z nich korzystamy tu z list wierzchokw, z ktrych krawdzie prowadz do danego wierzchoka. Moemy natomiast zaniedba poprawianie list, na ktrych wystpuj sklejane wierzchoki, gdy sklejamy wierzchoki w warstwach o coraz wikszych gbokociach i listy te nie bd ju nam potrzebne. Oznaczmy przez wi liczb krawdzi prowadzcych do i-tej warstwy. Koszt czasowy sklejania wierzchokw z warstwy o gbokoci i wynosi (ni + wi ). Poniszy fragment kodu skleja odpowiednie wierzchoki.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:

function CzyZgodne(a, b: Word ): Boolean; { Sprawdza, czy a i b maj te same kody. } var j : Word ; begin CzyZgodne := False; if V [a].kolor = V [b].kolor { Musz mie ten sam kolor. } then exit; for j := 1 to 3 do { Krawdzie musz prowadzi do tych samych wierzchokw. } if V [a].Dol [j ] = V [b].Dol [j ] then exit; CzyZgodne := True end procedure LikwidujKomnate(a, b: Word );

102

Labirynt studni
14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49:

{ Dokleja wierzchoek b do a. } var P : PElem; j : Word ; begin P := Gora[b]; while P = nil do begin with V [P .l ] do for j := 1 to 3 do if Dol [j ] = b then Dol [j ] := a; P := P .nast end end var ile, a, b: Word ; P , Q, W : PElem; begin W := Warstwy[i ]; P := W ; Q := P .nast; ile := 1; {Liczba rnych wierzchokw warstwy.} while Q = nil do begin {Przejd posortowan list.} a := P .l ; b := Q.l ; {Wierzchoki do ew. sklejenia.} if CzyZgodne(a,b) then LikwidujKomnate(a,b) else begin {Wierzchoek istotnie rny od dotychczasowych.} Inc(ile); P := Q; end Q := Q.nast end P := W ; while P = nil do begin {Likwiduj numeracj.} for j := 1 to 3 do V [V [P .l ].Dol [j ]].numer := 0; P := P .nast end {ile = liczba rnych wierzchokw warstwy.} end

Pen tre przedstawionego rozwizania mona znale na zaczonej dyskietce. Zanalizujmy koszt dziaania opisanego algorytmu. Z kadym wierzchokiem i kad krawdzi jest zwizana staa ilo informacji. Liczba krawdzi jest liniowa ze wzgldu na liczb wierzchokw. Tak wic zoono pamiciowa opisanego algorytmu wynosi (n), gdzie n jest liczb wierzchokw. Podzia wierzchokw na warstwy wymaga czasu (n). Posortowanie wierzchokw i-tej warstwy wedug ich kodw wymaga czasu (ni ). Sklejenie wierzchokw z

Labirynt studni
i-tej warstwy o tej samej charakterystyce wymaga czasu (ni + wi ). Tak wic czny czas dziaania opisanego algorytmu wynosi

103

n + h1 ni + h1 (ni + wi ) i=1 i=1

Zauwamy jednak, e h1 ni = n 2 oraz, e h1 wi < 3n. Std czas dziaania i=1 i=1 opisanego algorytmu wynosi (n).

Binarne diagramy decyzyjne

Opisywane zadanie ma zwizek z tzw. binarnymi diagramami decyzyjnymi (ang. binary decision diagrams, w skrcie BDD) stosowan w praktyce struktur danych. Struktura ta suy do zwizego reprezentowania formu rachunku zda. Przyjmijmy, e w formuach moe si pojawia k rnych zmiennych zdaniowych: x1 , . . . , xk . Podobnie jak w przypadku labiryntu Bajtosmoka, BDD ma posta multigrafu skierowanego. Wierzchoki tego multigrafu s podzielone na k +1 warstw, o gbokociach 0k. Warstw o gbokoci 0 tworz dokadnie dwa wierzchoki, reprezentujce prawd i fasz tak jakby byy dwie smocze jamy. Z kadego wierzchoka nalecego do pozostaych warstw wychodz dokadnie po dwie krawdzie, jedna z etykiet prawda i jedna z etykiet fasz (zamiast trzech krawdzi ponumerowanych 1, 2 i 3). Krawdzie wychodzce z danego wierzchoka musz prowadzi do wierzchokw nalecych do warstwy o gbokoci o 1 mniejszej. Warstw o gbokoci k tworzy dokadnie jeden wierzchoek odpowiednik wejcia do labiryntu. Zauwamy, e wszystkie cieki prowadzce z tego wierzchoka do wierzchokw reprezentujcych prawd i fasz maj dugo k + 1. W jaki sposb moemy traktowa BDD jak formu rachunku zda? Dla zadanego wartociowania zmiennych zdaniowych (tzn. przypisania zmiennym zdaniowym wartoci prawda/fasz) formua rachunku zda jest albo prawdziwa, albo faszywa. Aby odczyta, czy dla zadanego wartociowania zmiennych zdaniowych BDD jest prawdziwe, czy faszywe musimy przej przez BDD zgodnie z planem podry wyznaczonym przez wartociowanie zmiennych. Przejcie zaczynamy od jedynego wierzchoka nalecego do warstwy o gbokoci k. Midzy wierzchokami przechodzimy wzdu krawdzi bdc w wierzchoku nalecym do warstwy o gbokoci h wybieramy t krawd, ktra ma etykiet rwn wartoci zmiennej xh . Warto BDD dla danego wartociowania jest taka, jak etykieta wierzchoka, do ktrego docieramy na kocu przejcia. Poniszy rysunek przedstawia BDD reprezentujce formu x2 (x1 x2 ).

104

Labirynt studni

prawda

falsz

falsz prawda

prawda Rys. 1

falsz

Zauwamy, e dla kadej formuy rachunku zda istnieje BDD reprezentujce dan formu. BDD takie moemy atwo zbudowa. Wemy pene drzewo binarne wysokoci k + 1. Krawdzie wychodzce z wierzchokw na lewo etykietujemy prawd, a wychodzce na prawo faszem. Zauwamy, e kademu wartociowaniu zmiennych zdaniowych odpowiada dokadnie jeden li ten, do ktrego prowadzi z korzenia drzewa przejcie zgodne z wartociowaniem. Licie drzewa etykietujemy prawd i faszem, zgodnie z tym jaka jest warto formuy dla wartociowania zmiennych odpowiadajcego danemu liciowi. Jeeli skleimy licie majce takie same etykiety (i ew. dodamy jeden wierzchoek, jeeli wszystkie licie maj takie same etykiety), to uzyskujemy BDD reprezentujce dan formu. Zauwamy, e formua rachunku zda jest tautologi wtw. gdy w reprezentujcym j BDD adna krawd nie prowadzi do wierzchoka reprezentujcego fasz. Omawiane zadanie odpowiada przeksztaceniu BDD na rwnowane o minimalnej liczbie wierzchokw. Takie BDD stosuje si jako form zwizego reprezentowania formu rachunku zda. Warto nadmieni, e dwie formuy rachunku zda s sobie rwnowane wtedy i tylko wtedy, gdy minimalne BDD reprezentujce te formuy s takie same.

TESTY
Do sprawdzania rozwiza zawodnikw uyto 14-tu testw. Oto ich krtka charakterystyka: LAB1.IN prosty test badajcy poprawno rozwiza, n = 10, LAB2.IN test losowy badajcy poprawno rozwiza, n = 50, LAB3.IN test losowy badajcy poprawno rozwiza, n = 200, LAB4.IN w tym tecie plan labiryntu skada si z 335 warstw, a kada warstwa z 3 wierzchokw: czerwonego, zielonego i niebieskiego, (z wyjtkiem najpytszej i najgbszej warstwy, ktre maj po jednym wierzchoku); z kadego wierzchoka prowadz krawdzie czce go z wszystkimi wierzchokami o gbokoci o 1 mniejszej; adne wierzchoki nie s sklejane ze sob,

Labirynt studni
LAB5.IN prosty test badajcy poprawno rozwiza, n = 12, LAB6.IN w tym tecie plan labiryntu ma ksztat penego drzewa wysokoci 8, plus smocza jama; wszystkie wierzchoki z jednej warstwy s tego samego koloru, a kolejne warstwy maj kolory dobierane na przemian; w kadej warstwie wszystkie wierzchoki s sklejane ze sob, LAB7.IN losowy test badajcy efektywno rozwiza, wszystkie wierzchoki s tego samego koloru, n = 6 000, 558 skleje wierzchokw, LAB8.IN losowy test badajcy efektywno rozwiza, wszystkie wierzchoki s tego samego koloru, n = 6 000, 51 skleje wierzchokw, LAB9.IN losowy test badajcy efektywno rozwiza, wszystkie wierzchoki s tego samego koloru, n = 6 000, adne wierzchoki nie s sklejane ze sob, LAB10.IN prosty test badajcy poprawno rozwiza, n = 12, LAB11.IN test badajcy efektywno rozwiza, wszystkie wierzchoki s tego samego koloru, n = 6 000, dla kadego i n 3 z wierzchoka nr i prowadz krawdzie do wierzchokw o numerach i + 1, i + 2 i i + 3, z wierzchoka nr n 2 prowadzi jedna krawd do wierzchoka nr n 1 i dwie krawdzie do wierzchoka nr n, a z wierzchoka nr n 1 wszystkie krawdzie prowadz do wierzchoka nr n; adne wierzchoki nie s sklejane ze sob, LAB12.IN prosty test badajcy poprawno rozwiza, n = 12, LAB13.IN test badajcy efektywno rozwiza, wszystkie wierzchoki s tego samego koloru, n = 6 000, kada warstwa skada si z dokadnie jednego wierzchoka, krawdzie wychodzce z kadego wierzchoka prowadz do (jedynego) wierzchoka o gbokoci o jeden mniejszej; adne wierzchoki nie s sklejane ze sob, LAB14.IN prosty test badajcy poprawno rozwiza, n = 12. W testach nr 4, 9, 11 i 13 nie byo adnych skleje wierzchokw. Testy te zostay zgrupowane z prostymi testami badajcymi poprawno rozwiza (4 z 5, 9 z 10, 11 z 12 oraz 13 z 14) oceniane rozwizanie otrzymywao punkty za testy z danej grupy tylko wtedy, gdy uzyskiwao punkty za obydwa testy tworzce grup. Takie grupowanie testw pozwalao wychwyci rozwizania stwierdzajce zawsze, e adne wierzchoki nie ulegaj sklejeniu.

105

106

Labirynt studni
Ponisza tabelka przedstawia wielkoci poszczeglnych testw oraz wyniki. Nr testu 1 2 3 4 5 6 7 8 9 10 11 12 13 14 n 10 50 200 1 001 12 3 281 6 000 6 000 6 000 12 6 000 12 6 000 12 Wynik 6 33 106 1 001 8 9 5 442 5 949 6 000 7 6 000 8 6 000 8

Zawody III stopnia


opracowania zada

Piotr Chrzstowski
autor zadania, opracowanie

Marcin Sawicki
program wzorcowy

Lollobrygida
W fabryce poduszkowcw do budowy torw testowych uywa si standardowych blokw o rnych wysokociach, ustawianych jeden za drugim. W idealnie zbudowanym torze, zwanym lollobrygid, nigdy nie wystpuj obok siebie dwa bloki jednakowej wysokoci, nigdy te trzy kolejne bloki nie maj kolejno coraz wikszych, albo coraz mniejszych wysokoci. Mwic bardziej formalnie, niech h1 , . . . , hn oznacza cig wysokoci kolejnych blokw nalecych do toru. Jeli dla kadego 1 i n 2 zachodzi: hi < hi+1 i hi+1 > hi+2 lub hi > hi+1 i hi+1 < hi+2 , to taki tor mona nazwa lollobrygid.

Przykad
Z zestawu 5 blokw o wysokociach 3 , 3 , 3 , 5 , 2 nie da si zbudowa lollobrygidy, gdy albo musiayby sta w niej obok siebie dwa bloki wysokoci 3 , albo musi si w niej pojawi jedna z niedozwolonych sekwencji 2 , 3 , 5 lub 5 , 3 , 2 . A oto przykad lollobrygidy, poprawnie zbudowanej z innego zestawu blokw: 3 , 2 , 5 , 2 , 3 , 1 . Z tego zestawu mona te zbudowa inne lollobrygidy.

Zadanie
Napisz program, ktry wczyta z pliku tekstowego LOL.IN liczb zestaww danych i dla kadego zestawu: wczyta liczb blokw oraz wysokoci poszczeglnych blokw, stwierdzi, czy z podanego zestawu mona zbudowa lollobrygid, zapisze wynik w pliku tekstowym LOL.OUT.

Wejcie
W pierwszym wierszu pliku tekstowego LOL.IN znajduje si liczba cakowita d, 1 d 100 , rwna liczbie zestaww danych. W nastpnym wierszu pliku LOL.IN zaczyna si pierwszy zestaw danych. W pierwszym wierszu kadego zestawu danych znajduje si liczba cakowita n, 3 n 1 000 000 . Jest to liczba blokw w tym zestawie. W kolejnych n wierszach znajduj si wysokoci blokw. Kady z tych wierszy zawiera jedn liczb cakowit h rwn wysokoci odpowiedniego bloku, 1 h 10 9 . Kolejne zestawy danych nastpuj bezporednio po sobie.

110

Lollobrygida
Wyjcie
Plik tekstowy LOL.OUT powinien zawiera dokadnie d wierszy, po jednym dla kadego zestawu danych. W i-tym wierszu pliku LOL.OUT powinien by zapisany jeden wyraz: TAK, jeeli z i-tego zestawu blokw mona zbudowa lollobrygid, NIE, w przeciwnym przypadku.

Przykad
Dla pliku wejciowego LOL.IN: 2 5 3 3 3 5 2 6 3 3 1 5 2 2 poprawn odpowiedzi jest plik tekstowy LOL.OUT: NIE TAK

ROZWIZANIE
Zadanie o lollobrygidzie w duej czci sprowadzao si do znanego i opisywanego w literaturze zadania o wyborze lidera. Zadanie to formuuje si nastpujco: Stwierdzi, czy w cigu a1 , . . . , an istnieje warto, ktra wystpuje w nim wicej ni n 2 razy. Jeeli taka warto wystpuje, to nazywamy j liderem. Okazuje si bowiem, e zachodzi nastpujce twierdzenie: Twierdzenie. Z elementw a1 , . . . , an mona uoy lollobrygid wtedy i tylko wtedy, gdy zachodzi jeden z dwch przypadkw: (1) W cigu a1 , . . . , an nie wystpuje lider. (2) Dugo n jest nieparzysta i w cigu a1 , . . . , an istnieje lider wystpujcy w nim dokadnie n+1 razy, a pozostae elementy cigu a1 , . . . , an s albo wszystkie wik2 sze, albo wszystkie mniejsze od lidera. Dowd. Najpierw pokaemy, e jeeli istnieje lider nie speniajcy warunku (2), to lollobrygidy uoy si nie da, a potem, e jeli cig spenia ktrykolwiek z warunkw (1) lub (2), to lollobrygid uoy si da.

Lollobrygida
Zamy wic, e istnieje lider nie speniajcy warunku (2). Jeeli n jest parzyste, to lider wystpuje co najmniej n + 1 razy, zatem przy kadym uoeniu wyrazw 2 cigu gdzie dwaj liderzy musz ze sob ssiadowa. Jeli bowiem podzielimy cig na dwuelementowe bloki (a jest ich dokadnie n ), to z zasady szuadkowej Dirichleta 2 wynika, e przynajmniej w jednym bloku znajd si dwaj liderzy, wic podany cig nie bdzie lollobrygid. Jeeli n jest nieparzyste i lider wystpuje co najmniej n+1 +1 razy, to dzielc cig 2 a1 , . . . , an na bloki dwuelementowe, otrzymamy takich blokw n1 i zostanie jeszcze 2 jeden blok jednoelementowy. Tak jak poprzednio, kada prba umieszczenia w takich blokach n+1 + 1 liderw musi si zakoczy tym, e dwaj liderzy znajd si w jednym 2 bloku obok siebie. Jeli za n jest nieparzyste i lider wystpuje dokadnie n+1 razy, ale 2 nie jest najmniejsz, ani najwiksz wartoci, to co prawda mona wszystkich liderw rozmieci w n1 + 1 rnych blokach, ale eby tor by lollobrygid musimy umieci 2 ich wszystkich na nieparzystych pozycjach. Wtedy jednak na pewno wystpi sytuacja, w ktrej kolejne trzy wartoci bd albo rosnce, albo malejce. Zamy bowiem dla symetrii, e a2 > a1 (a1 jest wartoci lidera). Wtedy a4 > a3 = a1 (inaczej cig a2 , a3 , a4 byby malejcy), a6 > a5 = a1 , itd. Okazaoby si wic, e a1 jest najmniejsz wartoci wbrew zaoeniu. Analogicznie przeprowadzamy rozumowanie, jeli a2 < a1 . Pokazalimy wic pierwsz cz twierdzenia. Pozostaje wykaza, e jeli lidera nie ma lub jeli jest lider, ale speniajcy warunek (2), to lollobrygid da si uoy z podanych wartoci. Proste jest pokazanie, e jeli lider spenia warunek (2), to lollobrygid daje si uoy. Wystarczy na wszystkich nieparzystych pozycjach ulokowa lidera, a pozostae elementy umieci dowolnie na parzystych pozycjach. Warunek lollobrygidy w oczywisty sposb jest speniony. Zostao zatem do wykazania, e jeli lidera nie ma, to lollobrygid zawsze si da uoy. Dowd bdzie indukcyjny ze wzgldu na dugo cigu n. Wzmocnimy najpierw nieco tez jest to czsty chwyt przy dowodach indukcyjnych; korzystamy przecie wtedy z mocniejszego zaoenia indukcyjnego. Pokaemy zatem, e jeli lidera w cigu a1 , . . . , an nie ma, to istnieje dla niego lollobrygida b1 , . . . , bn , i to taka, e b1 = bn . Baz indukcji pokaemy dla wartoci n = 2. To nie szkodzi, e w sformuowaniu zadania n 3. Jeeli uda si nam zacz indukcj od mniejszej wartoci tym lepiej. Twierdzenie staje si troch oglniejsze, a zazwyczaj dla mniejszych wartoci n atwiej jest udowodni baz indukcji. Faktycznie, zamy, e w cigu a1 , a2 nie ma lidera. Wobec tego a1 = a2 , zatem cig a1 , a2 jest lollobrygid: nie ma w nim ani dwch ssiadujcych, rwnych sobie elementw, jak rwnie adne trzy ssiednie elementy nie s posortowane po prostu nie istniej. Zamy teraz, e teza zachodzi dla kadego cigu a1 , . . . , ak , k < n. Rozbijmy dowd na dwa przypadki: n nieparzyste i n parzyste. Najpierw n nieparzyste. Niech m bdzie mod cigu a1 , . . . , an . (Moda cigu a1 , . . . , an jest to taka warto, ktra w cigu powtarza si najczciej. Jeli takich wartoci jest wicej ni jedna, to kada z tych wartoci jest mod. Lider oczywicie zawsze jest mod, ale nie na odwrt.) Usumy z cigu a1 , . . . , an jeden element mod. W powstaym (n 1)-elementowym cigu nie ma lidera, bo przy nieparzystym

111

112

Lollobrygida
n, co najwyej n1 elementw cigu mogo by rwnych modzie nie bdcej liderem 2 i adna inna warto nie moga wystpi w nim wicej razy. Taki cig po usuniciu jednego elementu bdcego mod spenia zaoenie indukcyjne: jest krtszy od n i nie zawiera lidera, zatem mona z niego utworzy lollobrygid b1 , . . . , bn1 tak, e b1 = bn1 . Zamy, e b1 < b2 , a co za tym idzie, bn2 < bn1 (n 1 jest parzyste, a kolejne wyrazy s na przemian od siebie wiksze i mniejsze). W przypadku odwrotnym, kiedy b1 > b2 i bn2 > bn1 , rozumowanie bdzie analogiczne. Jeli teraz m > b1 , to wstawiajc m przed cig b1 , . . . , bn1 otrzymujemy lollobrygid, jeli nie, to sprawdzamy, czy m < bn1 . Jeli tak, to lollobrygid otrzymamy wstawiajc m na koniec. Pozosta wic przypadek b1 m bn1 , przy czym jedna z tych nierwnoci musi by ostra. Wstawienie m z tej strony, z ktrej nierwno jest ostra, midzy skrajny element, a jego ssiada, spowoduje, e otrzymamy lollobrygid o n elementach. To koczy dowd dla n nieparzystego. Jeli n jest parzyste, to mamy troch inn sytuacj, bo usunicie mody moe doprowadzi nas do sytuacji, w ktrej pojawi si lider w cigu n1-elementowym i nie bdzie mona skorzysta z zaoenia indukcyjnego. Poradzimy sobie z tym przypadkiem zauwaajc, e tak moe by jedynie wtedy, gdy w cigu wystpuj tylko dwie wartoci i kada z nich jest mod. Wtedy nie musimy stosowa indukcji wystarczy ustawi jedne wartoci na nieparzystych, a drugie na parzystych miejscach i mamy lollobrygid. W kadym innym przypadku po usuniciu z cigu, w ktrym nie byo lidera, jednego elementu o wartoci mody, lidera nadal nie bdzie. Moemy wtedy stosowa zaoenie indukcyjne. Zamy wic, e cig b1 , . . . , bn1 jest lollobrygid tak, e b1 = bn1 . Bez utraty oglnoci moemy zaoy, e b1 < b2 , a co za tym idzie, bn2 > bn1 , gdy n 1 jest nieparzyste. Przypadek przeciwny ma analogiczny dowd. Jeeli teraz m > b1 lub m > bn1 , to wstawiajc m na pocztek lub odpowiednio na koniec, uzyskujemy lollobrygid. Pozostaje zatem do rozwaenia przypadek, gdy m nie przekracza adnego ze skrajnych elementw. Poniewa s one rne, wic m od jednego z nich musi by ostro mniejsze. Dajmy na to, e m < b1 . Wtedy wstawiajc m midzy b1 a b2 , otrzymujemy lollobrygid. Analogicznie postpujemy, gdy m < bn1 . Wyczerpalimy tym samym wszystkie przypadki, za kadym razem pokazujc, e lollobrygida jest moliwa do uoenia. Twierdzenie zostao tym samym udowodnione. U! Mamy ju w rku wany wynik, ktry uatwi rozwizanie zadania w efektywny sposb. Pozostaje wic sprawdzi, czy lider istnieje i jeeli nie, to odpowied jest TAK, a jeli lider istnieje, to wystarczy upewni si, czy nie spenia warunku (2). Jeeli spenia, to odpowied jest TAK, a jeli nie spenia, to odpowied jest NIE. Omwmy tu 4 rne algorytmy stwierdzania istnienia lidera. Pierwszy algorytm, by moe najprostszy do wymylenia, polega na posortowaniu danych i znalezieniu w posortowanym cigu najduszej sekwencji tych samych elementw. Koszt dobrego sortowania jest proporcjonalny do n log n, koszt znalezienia najduszej staej sekwencji jest proporcjonalny do n. cznie mamy wic algorytm o zoonoci rzdu n log n. Niele, ale nie optymalnie. Drugi algorytm bazuje na spostrzeeniu, e jeli w cigu jest lider, to jest on rwny medianie cigu, czyli elementowi, ktry w posortowanym cigu wystpiby porodku (dla n parzystego jako median deniuje si dowolny z dwch elementw rodkowych). Algorytm zatem rozbija si na dwie czci: wyznaczenie mediany i spraw-

Lollobrygida
dzenie, czy mediana jest liderem. Ta druga cz jest bardzo prosta. Wyznaczenie mediany jest bardziej kopotliwe, o ile nie chcemy korzysta z sortowania. Median mona wyznaczy w czasie pesymistycznym proporcjonalnym do n, ale nie jest to proste. Zadanie to realizuje na przykad algorytm Bluma, Floyda, Pratta, Rivesta, Tarjana, zwany algorytmem pitek lub algorytmem piciu kada z nazw jest uzasadniona. Algorytm ten opisany jest np. w ksice [10]. Problem polega na tym, e koszt tego algorytmu, cho liniowy, obarczony jest du sta i dla potrzeb naszego zadania algorytm ten raczej si nie nadaje. Przy podanych ograniczeniach na rozmiar danych uzyskanie za pomoc tego algorytmu lepszego czasowo rozwizania, ni przez sortowanie, wydaje si trudne, a by moe jest wrcz niemoliwe. Pamitajmy bowiem, e cho teoretycznie zoono jednego algorytmu moe by lepsza od zoonoci drugiego, to wcale nie znaczy, e zawsze naley stosowa ten pierwszy. Na przykad dla krtkich cigw danych (rzdu kilku-kilkunastu) nie naley sortowa quicksortem, tylko ktrym z algorytmw o zoonoci kwadratowej, choby przez proste wstawianie. Z praktycznego punktu widzenia lepiej byoby tu zastosowa opisany rwnie w [10] algorytm Hoarea wyznaczania mediany. Jego idea jest podobna do pomysu sortowania quicksortem. Losuje si bowiem jedn z wartoci cigu, a nastpnie rozrzuca pozostae wartoci na 3 grupy: elementw mniejszych, rwnych i wikszych od tej wartoci, po czym szuka si elementu o odpowiednim numerze w jednej z tych grup, t sam zreszt metod. Ten algorytm ma kwadratow zoono pesymistyczn (gdy zawsze bdziemy mieli pecha i wybierali element skrajny jako warto, wzgldem ktrej rozrzucamy), ale rednio dziaa w czasie liniowym. W praktyce doskonale nadaje si do znajdowania mediany i jest do prosty do zakodowania wasno bardzo wana w trakcie zawodw. Trzeci algorytm, troch niepewny, bo nie dajcy dobrych rezultatw ze stuprocentow pewnoci, to algorytm probabilistyczny polegajcy po prostu na kilkukrotnym wylosowaniu dowolnej wartoci i sprawdzeniu, czy jest ona liderem. Zauwamy, 1 e jeli lider istnieje, to z prawdopodobiestwem wikszym ni 2 wylosujemy wanie jego. Jeeli na przykad po dziesiciu losowaniach nie natramy na lidera, to uznajemy, e lidera nie ma i dajemy odpowied TAK. Prawdopodobiestwo bdu jest 1 mniejsze ni 1000 . W praktyce tego typu rozwizania s stosowane i na olimpiadzie czasami bardzo skuteczne. Tutaj wad jest konieczno wielokrotnego przegldania caego cigu wejciowego. Im wiksz chcemy mie pewno, tym wicej to kosztuje. Testy byy tak przygotowane, eby z duym prawdopodobiestwem spowodowa podanie zej odpowiedzi, albo przekroczenie limitu czasowego, co najmniej w jednym z zestaww. Ale podobnie jak zawodnicy, ktrzy uyli tego algorytmu do rozwizania naszego zadania, nie mogli by pewni, czy otrzymaj dobre wyniki, tak i organizatorzy, sprawdzajc zadanie, nie mogli by pewni, czy wychwyc niepewne rozwizanie. Czwarty algorytm, wzorcowy, i bardzo elegancki, ktrego poprawno jest wysoce nieoczywista. Algorytm ten opisany jest w ksice [23]. Ze wzgldu na prostot algorytmu podamy tutaj jego peny kod pascalowy.
1: 2: 3: 4:

113

{ Zakadamy, e elementy cigu podane s w tablicy A[1..n]. Algorytm stwierdza, czy w tablicy A znajduje si lider. } ile:=1; l :=A[1]; { l - kandydat na lidera } for i :=2 to n do

114

Lollobrygida
5: 6: 7: 8: 9: 10: 11: 12: 13:

if A[i ]=l then ile:=ile+1 else if ile = 1 then l :=A[i ] else ile:=ile-1; { Po tej ptli, jeli w A jest lider, to jest on rwny l . Sprawdzamy wic, czy l jest liderem. } ile:=0; for i :=1 to n do if A[i ]=l then ile:=ile+1; if ile > n div 2 then { lider jest } else { lidera nie ma }

Uwaga: aby uy tego algorytmu do rozwizania naszego zadania, w drugiej ptli naley doda fragment sprawdzajcy warunek (2) z udowodnionego twierdzenia. Fragment ten pominlimy, aby nie popsu przejrzystoci tekstu. Nie od razu wida, dlaczego ten algorytm miaby dawa poprawne odpowiedzi. Najlepiej si o tym przekona prbujc skonstruowa kontrprzykad. Po kilku prbach okae si to niemoliwe. Peny dowd poprawnoci algorytmu jednak nie jest banalny. Przy okazji warto zauway, e o ile poprzednie algorytmy potrzeboway tablicy do zapamitania wszystkich wartoci cigu, to tutaj moemy z tablicy zrezygnowa i wczytywa na bieco wartoci z pliku. Dwukrotne wczytanie wystarcza, eby stwierdzi istnienie lidera. Algorytm ten ma zatem koszt czasowy liniowy, a pamiciowy stay. Pozostaje jeszcze wyjani, dlaczego tor o podanych wasnociach nazwalimy lollobrygid. Narciarze zapewne wiedz, e tak nazw nosi jedna z bardzo muldziastych tras narciarskich w Szczyrku. Dlaczego jednak trasa ta zostaa nazwana nazwiskiem synnej woskiej aktorki, pozostawmy dociekliwoci czytelnikw.

TESTY
Testy i czasy odcicia zostay tak dobrane, aby moliwie jak najdokadniej oddzieli algorytmy liniowe od algorytmw o czasie dziaania rzdu n log n i wyeliminowa programy bdne (np. zgadujce odpowied). Kady test skada si z 30 przypadkw. Pierwsze 4 testy, to testy poprawnociowe, zawierajce same proste przypadki (n 22). Nastpne 6 testw, to testy wydajnociowe. Zawieraj po kilka przypadkw duych danych (n = 99999 1 1 ), 2 2 pozostae przypadki s podobne co do wielkoci do pierwszych czterech testw. Oto opisy poszczeglnych testw: LOL1.IN mae dane, n parzyste. LOL2.IN mae dane, n parzyste, jeli odpowiedzi ma by TAK, to adne n 2 elementw si nie powtarza (tzn. nie ma prawie lidera), wwczas konstrukcja lollobrygidy moe by dla niektrych algorytmw nieco trudniejsza. LOL3.IN mae dane, n nieparzyste, nie ma lidera, o ile odpowiedzi ma by TAK.

Lollobrygida
LOL4.IN mae dane, n nieparzyste, w kadym przypadku istnieje lider, czyli jeli odpowiedzi jest TAK, to wszystkie inne elementy s od niego albo mniejsze, albo wiksze. W testach wydajnociowych wystpuj przemieszane wszystkie 4 powysze przypadki parzystoci i istnienia, lub nie, lidera. LOL5.IN 3 przypadki due, 27 maych, duo rnych wartoci, kolejno elementw losowa. LOL6.IN 3 przypadki due, 27 maych, duo rnych wartoci, kolejno elementw rosnca. Chodzi o wyeliminowanie pewnych nieefektywnych implementacji algorytmu Hoarea lub Quicksortu, ktre w takim przypadku zachowuj si kwadratowo. LOL7.IN 3 przypadki due, 27 maych, duo rnych wartoci, kolejno elementw malejca. LOL8.IN 3 przypadki due, 27 maych, kolejno rosnca, zarwno przypadki z du iloci rnych wartoci, jak i z kilkunastoma wartociami powtarzajcymi si wielokrotnie oraz z zaledwie trzema rnymi wartociami. LOL9.IN jak wyej, kolejno malejca. LOL10.IN 8 duych przypadkw, 22 mae, kady z przypadkw skada si jedynie z trzech rnych wartoci, albo przemieszanych, albo posortowanych rosnco lub malejco. Czasy odcicia byy dobrane tak, aby wicej ni dwukrotnie przewyszay czas dziaania wzorcowego rozwizania, ale dla duych testw powodoway odcicie przy korzystaniu z procedur sortujcych. Mae testy doczepione zostay do duych aby wyeliminowa algorytmy zgadujce odpowiedzi, bowiem jedynie rozwizanie kompletu 30 przypadkw zaliczao test.

115

Marcin Mucha
autor zadania, opracowanie

Pawe Wol
program wzorcowy

Jajka
Wiadomo, e jajko zrzucone z wystarczajco duej wysokoci brzydko si rozbija. Dawniej wystarczya wysoko jednego pitra, ale genetycznie podrasowane kury znosz jajka nie tukce si nawet po zrzuceniu z wysokoci 100 000 000 piter. Badania nad wytrzymaoci jajek prowadzi si wykorzystujc drapacze chmur. Opracowano specjaln skal wytrzymaoci jajek: jajko ma wytrzymao k piter, jeli zrzucone z k-tego pitra nie rozbija si, ale zrzucone z ( k + 1)-ego ju tak. W przypadku gdy drapacz chmur, ktrym dysponujemy, ma n piter, przyjmujemy, e jajko rozbija si, gdy zrzucimy je z ( n + 1)-ego pitra. Przyjmujemy te, e kade jajko zrzucone z pitra o numerze 0 nie rozbija si. Kierownik laboratorium postanowi wprowadzi oszczdnoci w procesie badawczym. Ograniczy on liczb jajek, ktre wolno rozbi w trakcie eksperymentu majcego na celu ustalenie wytrzymaoci jajek danego gatunku. Dodatkowo naley zminimalizowa liczb zrzutw jajek. Oznacza to, e majc do dyspozycji pewn liczb jajek danego gatunku i drapacz chmur naley, w jak najmniejszej liczbie prb stwierdzi, jaka jest wytrzymao jajek danego gatunku.

Zadanie
Twoim zadaniem jest napisanie moduu zawierajcego trzy procedury (funkcje w przypadku jzyka C/C++): nowy eksperyment ta procedura bdzie wywoywana na pocztku kadego nowego eksperymentu (moe by ich wicej ni jeden); daj pytanie ta procedura suy do zadawania pytania, czy jajko wytrzyma zrzucenie z okrelonego pitra, czy te rozbije si; w tym celu naley w opisanej dalej zmiennej globalnej pietro umieci numer pitra, z ktrego ma by zrzucone jajko, analizuj odpowiedz ta procedura powinna odczyta warto zmiennej globalnej odpowiedz, ktra zawiera odpowied na ostatnio zadane pytanie (opis tej zmiennej znajduje si w kolejnym paragrae) i dokona analizy tej odpowiedzi jeli w wyniku tej analizy zostanie okrelona wytrzymao jajka, to procedura ta powinna ten fakt zasygnalizowa poprzez nadanie odpowiednich wartoci zmiennym globalnym x oraz wiem (szczegy znajduj si w kolejnym paragrae). Program nadzorujcy przebieg eksperymentw wywoa napisan przez Ciebie procedur nowy eksperyment na pocztku kadego nowego eksperymentu, po czym cyklicznie bdzie wykonywa nastpujce czynnoci: wywoanie procedury daj pytanie, odpowiadanie na pytanie, wywoanie procedury analizuj odpowiedz, a do momentu, gdy Twj program stwierdzi, e zna wytrzymao jajek gatunku uywanego w danym eksperymencie (tzn. procedura analizuj odpowiedz umieci odpowiedni warto w zmiennej globalnej wiem).

118

Jajka
Uwaga: Nie zakadaj, e program nadzorujcy przebieg eksperymentw faktycznie ustala pewn wytrzymao jajka przed rozpoczciem danego eksperymentu. Moe on dobiera j w trakcie trwania eksperymentu w taki sposb, aby pasowaa do wszystkich wczeniej udzielonych odpowiedzi oraz aby zmusi Twj program do zadania jak najwikszej liczby pyta. Tak wic, powiniene dy do tego, aby liczba pyta, jakie Twj program bdzie musia zada w najgorszym przypadku, bya jak najmniejsza.

Komunikacja
Komunikacja pomidzy napisanym przez Ciebie moduem, a programem nadzorujcym przebieg eksperymentw, odbywa si poprzez zmienne globalne. Liczba piter drapacza zapisana bdzie w zmiennej globalnej wysokosc typu Longint (w przypadku jzyka C/C++ jest to typ long int). Bdzie to dodatnia liczba cakowita, nie wiksza ni 100 000 000 . Maksymalna liczba jajek, ktre mona stuc w trakcie trwania eksperymentu zapisana bdzie w zmiennej globalnej jajka typu Integer (w przypadku jzyka C/C++ jest to typ int). Bdzie to dodatnia liczba cakowita, nie wiksza ni 1000 . Zadanie pytania, czy jajko wytrzyma zrzucenie z k-tego pitra, w procedurze daj pytanie polega na przypisaniu zmiennej globalnej pietro typu Longint (w przypadku jzyka C/C++ jest to typ long int) liczby k. Odpowied na zadane pytanie jest umieszczana w zmiennej globalnej odpowiedz typu Boolean (w przypadku jzyka C/C++ jest to typ int). Twierdzcej odpowiedzi na zadane pytanie (tzn. jajko wytrzyma) odpowiada warto TAK, a przeczcej (tzn. jajko rozbije si) odpowiada NIE, gdzie TAK i NIE s staymi o wartociach, odpowiednio, true i false (w przypadku jzyka C/C++ s to makra o wartociach, odpowiednio, 1 i 0). W przypadku znalezienia wytrzymaoci jajka Twj program powinien w procedurze analizuj odpowiedz zapisa do zmiennej globalnej wiem typu Boolean (w przypadku jzyka C/C++ jest to typ int) TAK oraz w zmiennej globalnej x typu Longint (w przypadku jzyka C/C++ jest to typ long int) znalezion wytrzymao jajka.

Katalogi i pliki
Programujcy w Pascalu powinni przygotowywa swoje rozwizanie w katalogu JAJPAS, natomiast programujcy w C i C++ w katalogu JAJC. W katalogu JAJPAS (odpowiednio JAJC) znajdziesz nastpujce pliki: JAJmod.pas (odpowiednio JAJmod.h i JAJmod.c) modu zawierajcy denicje staych TAK i NIE oraz deklaracje zmiennych globalnych, JAJ.pas szkielet moduu znajdujcego wytrzymao jajka; powiniene uzupeni ten plik denicjami funkcji nowy eksperyment, daj pytanie i analizuj odpowiedz (dla piszcych w C lub C++ nagwki powyszych funkcji znajduj si w pliku JAJ.h, musisz napisa plik JAJ.c lub JAJ.cpp z denicjami tych funkcji), test.pas (odpowiednio test.c) przykadowy program nadzorujcy przebieg eksperymentw i korzystajcy z Twojego moduu.

Wyjcie
Wynikiem Twojej pracy powinien by zapisany na dyskietce tylko jeden plik: JAJ.pas, JAJ.c lub JAJ.cpp.

Jajka ROZWIZANIE
Na pocztku eksperymentu wiemy, e wytrzymao jajek danego gatunku mieci si w przedziale [0, wysokosc]. Jeli na pewnym etapie eksperymentu wiemy, e wytrzymao mieci si w przedziale [a, b], to czego dowiemy si po zrzuceniu jajka z pitra o numerze p? Oczywicie bdziemy wybiera a < p b, gdy dla innych wartoci p jest jasne, czy jajko si rozbije, czy nie. W przypadku, gdy jajko si rozbije bdziemy wiedzieli, e jego wytrzymao zawiera si w przedziale [a, p 1]. Jeeli natomiast jajko wytrzyma prb, oznacza to, e jego wytrzymao mieci si w przedziale [p, b]. Oczywicie eksperyment moemy zakoczy tylko wtedy, gdy dugo przedziau, w jakim mieci si wytrzymao jajek danego gatunku, wynosi 0. Zastanwmy si teraz, jak duy przedzia wytrzymaoci moemy sprawdzi majc do dyspozycji k jajek i n prb (t maksymaln dugo przedziau oznaczmy przez T (n, k)). Oczywicie mamy: T (n, 0) = T (0, k) = 0, dla n, k 0,

119

bo nie majc adnych jajek lub prb, niewiele moemy zdziaa. Jeeli chcemy znale wytrzymao jajek pewnego gatunku w n prbach majc do dyspozycji k jajek i wiemy, e ich wytrzymao mieci si w przedziale [a, b], to musimy zrzuci jajko z pitra o numerze nie wikszym ni a + T (n 1, k 1) + 1 (w przeciwnym razie, w przypadku rozbicia jajka, pozostaje nam n 1 prb i k 1 jajek, lecz wytrzymao mieci si w przedziale, ktrego dugo jest wiksza ni T (n 1, k 1)) oraz nie mniejszym ni b T (n 1, k) (w przeciwnym razie, w przypadku, gdy jajko wytrzyma prb, pozostaje nam n 1 prb i k jajek, lecz wytrzymao mieci si w przedziale o dugoci wikszej ni T (n 1, k)). Aby oba te warunki mogy by spenione, dugo przedziau [a, b] nie moe by wiksza od T (n 1, k 1) + 1 + T (n 1, k). W takim przypadku, jajko mona zrzuci z pitra o numerze min(a + T (n 1, k 1) + 1, b), a zatem: T (n, k) = T (n 1, k) + T (n 1, k 1) + 1, dla n, k Ta formua bardzo przypomina ponisz: n k = n1 n1 + k k1 1.

To sugeruje nam zbadanie zwizku liczb T (n, k) ze wspczynnikami dwumianowymi n . atwo sprawdzi (troszk trudniej zgadn), e: k
k

T (n, k) =
i=1

n , dla n, k i

0.

Porwnujc zapisy rnych T (n, k) atwo otrzymujemy: (1) T (n + 1, k) = 2T (n, k) + 1


1 (2) T (n 1, k) = 2 (T (n, k) + n k

, dla n, k 1), dla n

0; 1, k 0;

n1 k

120

Jajka
(3) T (n, k 1) = T (n, k)
n k

, dla n

0, k

1.

Przy pomocy wzoru (1) moemy wyznaczy najmniejsze n takie, e T (n, jajka) wysokosc. Jest to, jak atwo zauway, minimalna liczba prb jaka wystarcza do wyznaczenia wytrzymaoci jajek w danym eksperymencie. Czas wyznaczenia liczby n jest oczywicie liniowy ze wzgldu na t liczb. Przy pomocy wzorw (2), (3) moemy z kolei wyznaczy w czasie staym numer pitra, z ktrego naley zrzuci jajko (szczegy mona znale w treci programu).

Jak liczy symbole Newtona Rozwizanie wzorcowe wydaje si proste do zaprogramowania. Jest w nim jednak pewien haczyk. Na przykad, w jaki sposb oblicza n znajc n1 ? Nie moemy k k po prostu pomnoy przez n i podzieli przez n k, bo przekroczymy zakres. Mona jednak poradzi sobie z tym problemem stosujc czciowe dzielenie. Wiemy, e wynik n(n1) k naszych oblicze bdzie liczb cakowit. Mona wic w uamku nk skrci najn pierw lew cz ( nk ), a potem praw (szczegy mona znale w treci programu). Inne rozwizania Czy mona unikn zgadywania tajemniczego wzoru na T (n, k)? Chyba tak. Moemy przecie wylicza T (n, k) z formuy rekurencyjnej: T (n, k) = T (n 1, k) + T (n 1, k 1) + 1, dla n, k 1,

tzn. oblicza T (n, 0), T (n, 1), . . . , T (n, jajka) dla kolejnych n, a T (n, jajka) wysokosc. Nastpnie postpowa tak, jak w rozwizaniu wzorcowym, przy czym jeli mamy policzone wartoci T (n, 0), . . . , T (n, jajka), to T (n 1, 0), . . . , T (n 1, jajka) moemy uzyska z wzoru: T (n 1, k) = T (n, k) T (n 1, k 1) 1, dla k > 0 i T (n 1, 0) = 0 (oczywicie mona pamita wszystkie wyliczone wartoci i wtedy korzystanie z powyszego wzoru nie jest konieczne). Jaka jest zoono takiego algorytmu? Oczywicie O(jajka n), gdzie n jest najmniejsz tak liczb, e T (n, jajka) wysokosc. Pozostaje pytanie: jak due moe by n? Mona znale do dobre oszacowanie korzystajc z mdrych wzorw, wystarczy jednak prosty rachunek, aby si przekona, e iloczyn n jajka nigdy nie jest zbyt duy.

Jajka
Jeli jajka = 1, to oczywicie n = wysokosc. Ten przypadek mona jednak rozpatrywa osobno. Wystarczy rzuca jajko z kolejnych piter. Jeli jajka = 2, to mamy: T (n, 2) = n n + 1 2 =n+ n(n 1) n(n + 1) n2 = > , 2 2 2 10000 2 < 15000, co daje cznie

121

a wic wystarczy n = 2wysokosc jajka n = 30000 operacji. Dla jajka 3 mamy: T (n, k) n n n + + 1 2 3 =n+

n(n 1) n(n 1)(n 2) + = 2 6

n(n 1)(n + 1) n(n2 + 5) n3 = > , 6 6 6 3 a wic wystarczy n = 3 6wysokosc 600000000 900 i cznie najwyej 900jajka operacji. To ju jest dobra zoono, ale oczywicie mona przeprowadzi podobny prosty rachunek dla jajka 4 i otrzyma jeszcze lepsze oszacowanie. =n+

Opis dziaania programu arbitra


Arbiter oszukuje

Arbiter wcale nie ustala na pocztku eksperymentu wytrzymaoci jajka. Wczytuje natomiast z pliku testowego przedzia [min..max] wytrzymaoci dopuszczalnych. Oznacza to z grubsza tyle, e jego odpowiedzi maj si zgadza z pewn wytrzymaoci z tego przedziau. Przykadowo, jeli min = max, to arbiter faktycznie ustala na pocztku eksperymentu wytrzymao jajka
Arbiter jest zoliwy

Arbiter nie ma wyboru przy udzielaniu odpowiedzi na pytanie, czy jajko zrzucone z k-tego pitra rozbije si, gdy k min lub k > max. W przeciwnym razie, jeli ktra z odpowiedzi wymusi na module zawodnika zadanie wikszej liczby pyta ni jest to konieczne, to taka odpowied jest udzielana. Jeli za przy obu odpowiedziach modu zawodnika zachowuje szans na wyznaczenie wytrzymaoci jajek w odpowiedniej liczbie prb, to udzielana jest odpowied wymuszajca na module zawodnika zadanie co najmniej minimalnej wystarczajcej liczby pyta. Jeli obie odpowiedzi wymuszaj zadanie co najmniej minimalnej wystarczajcej liczby pyta, to udzielana jest odpowied losowa. Jeli adna odpowied nie ma tej waciwoci (moe si tak zday wtedy, gdy liczby min i max rni si mao, a zawodnik wstrzeli si w przedzia [min, max]), to udzielana jest odpowied TAK.

122

Jajka
Oczywicie jeli arbiter odpowiedzia, e jajko zbije si po zrzuceniu z pitra k < max, to od tego momentu max = k 1. Analogicznie arbiter musi zwikszy min, jeli odpowiedzia, e jajko si nie bije i k > min.
Arbiter wie wszystko

No dobrze, ale w jaki sposb mona stwierdzi, czy po udzieleniu konkretnej odpowiedzi zawodnik bdzie mia szans na zmieszczenie si w minimalnej wystarczajcej liczbie pyta? Mona to zrobi, jeli zna si wartoci T (n, k). Arbiter wylicza te wartoci w taki sam sposb, jak modu wzorcowy.
Diabelska strategia arbitra

Jak ju zaznaczylimy na wstpie, przypadek min = max jest wyjtkowo agodny dla zawodnika. Na drugim biegunie ley przypadek min = 0, max = wysokosc. W tej sytuacji arbiter nie jest w aden sposb ograniczony i gadko wymusza na module zawodnika, aby ten zada moliwie najwicej pyta. Ten przypadek bdziemy nazywa diabelsk strategi arbitra.
Czy arbiter gra w koci?

W niektrych przypadkach arbiter udziela odpowiedzi losowych. Czy to oznacza, e ten sam deterministyczny modu uruchomiony dwa razy moe uzyska dwie rne liczby punktw? To zdecydowanie nie byoby dobrze. Dlatego arbiter z pliku testowego oprcz wartoci min i max wczytuje cig 100 losowych bitw, z ktrego korzysta przy udzielaniu odpowiedzi.

TESTY
Do sprawdzania rozwiza zawodnikw uyto 11 testw, ktrych opisy znajduj si poniej. JAJ1.IN mae wysokoci drapacza, mao jajek, uczciwy arbiter, JAJ2.IN rednie wysokoci drapacza, rna liczba jajek, uczciwy arbiter, JAJ3.IN mae wysokoci drapacza, mao jajek, redniej trudnoci strategia udzielania odpowiedzi przez arbitra, JAJ4.IN rednie wysokoci drapacza, rna liczba jajek, redniej trudnoci strategia udzielania odpowiedzi przez arbitra, JAJ5.IN due wysokoci drapacza, rna liczba jajek, redniej trudnoci strategia udzielania odpowiedzi przez arbitra, JAJ6.IN mae wysokoci drapacza, mao jajek, strategia diabelska, JAJ7.IN rednie wysokoci drapacza, rna liczba jajek, strategia diabelska,

Jajka
JAJ8.IN due wysokoci drapacza, rna liczba jajek, strategia diabelska, JAJ9.IN due wysokoci drapacza, rna liczba jajek, strategia diabelska, JAJ10.IN due wysokoci drapacza, rna liczba jajek, strategia diabelska.

123

Grzegorz Jakacki
autor zadania

Marcin Mucha
opracowanie, program wzorcowy

Po-amana
W prostoktnym ukadzie wsprzdnych kady punkt o wsprzdnych cakowitych nazywamy p-punktem. Dowolny odcinek rwnolegy do jednej z osi wsprzdnych, o rnych kocach bdcych p-punktami, nazywamy p-odcinkiem. Rozwaamy odcinki domknite, tzn. koce nale do odcinka. aman zbudowan z k p-odcinkw, z ktrych kade kolejne dwa s prostopade, nazywamy po-aman stopnia k.

Zadanie
Napisz program, ktry: wczyta z pliku tekstowego POL.IN opisy pewnej liczby p-odcinkw oraz wsprzdne dwch rnych p-punktw A i B, wyznaczy minimalny stopie po-amanej czcej te dwa punkty i nie przecinajcej adnego z danych p-odcinkw lub stwierdzi, e taka po-amana nie istnieje, zapisze wynik do pliku tekstoweg POL.OUT.

Wejcie
Opis p-punktu skada si z dwch nieujemnych liczb cakowitych oddzielonych pojedynczym odstpem, bdcych odpowiednio wsprzdnymi x i y tego p-punktu. Liczby te nale do przedziau [ 0 ..1 000 000 000] . W pierwszym wierszu pliku wejciowego POL.IN znajduje si tylko opis p-punktu A. W drugim wierszu znajduje si tylko opis p-punktu B. W trzecim wierszu zapisana jest dokadnie jedna nieujemna liczba cakowita n bdca liczb p-odcinkw, 1 n 50 . W kadym z kolejnych n wierszy znajduj si opisy dokadnie dwch p-punktw, oddzielone pojedynczym odstpem. S to wsprzdne kocw jednego p-odcinka.

Wyjcie
W pierwszym i jedynym wierszu pliku tekstowego POL.OUT powinna znale si jedna liczba bdca minimalnym stopniem po-amanej czcej punkty A i B oraz nie przecinajcej adnego z zadanych p-odcinkw, lub sowo BRAK, jeli po-amana o powyszych wasnociach nie istnieje.

Przykad
Dla pliku wejciowego POL.IN:

126

Po-amana

1 3 5 0 0 2 4 3

2 4 0 5 2 0 2 7 7 2 4 6 0 5 7 3 2

B A

poprawn odpowiedzi jest plik wyjciowy POL.OUT: 5

ROZWIZANIE WZORCOWE
Niech x1 < x2 < . . . bdzie rosnco uporzdkowanym cigiem (bez powtrze) wsprzdnych x wszystkich kocw odcinkw z dodatkowo dodan wsprzdn x punktu B. Niech y1 < y2 < . . . bdzie analogicznym cigiem dla wsprzdnej y. Rozwamy podzia osi X = (, ) = i Xi , gdzie X1 = (, x1 ), X2 = {x1 }, X3 = (x1 , x2 ), X4 = {x2 } . . . Analogicznie deniujemy podzia osi Y . Podziay osi wyznaczaj podzia paszczyzny na prostokty otwarte, odcinki otwarte (by moe nieograniczone) i punkty.
Rys. 1 Podzia paszczyzny dla przykadowego zestawu p-odcinkw

B A

Niech P1 i P2 bd dwoma elementami powyszego podziau. Jeli z pewnego punktu p P1 istnieje amana o ustalonym stopniu i kocu w P2 , to z kadego innego punktu P1 take. W szczeglnoci za P2 mona przyj punkt B. Oznacza to, e punkty w jednym elemencie podziau zachowuj si identycznie, jeli chodzi o istnienie amanych o kocu w punkcie B. Rozwizanie w zasadzie si narzuca. Trzeba skonstruowa graf, w ktrym wierzchokami s elementy podziau (ma

Po-amana
on struktur kraty, co uatwia implementacj), krawdzie za oznaczaj moliwo przejcia z jednego elementu do innego. Nastpnie w tym grae uywamy procedury przeszukiwania wszerz (BFS), aby znale aman minimalnego stopnia czc element zawierajcy punkt A z punktem B. Musimy jednak w procedurze BFS dokona dwu modykacji: (1) oddzielnie rozpatrywa wejcia pionowe i poziome, poniewa ze wzgldu na dalsz tras nie s to sytuacje jednakowe, (2) po dojciu do wierzchoka pionowo przechodzimy nie do jego najbliszych ssiadw, ale do wszystkich wierzchokw, do ktrych mona z niego doj poziomo (przypadek dojcia poziomego jest analogiczny) w ten sposb algorytm ma zoono przeszukiwania BFS, a pierwsze dojcie do punktu B od razu daje odpowied na postawione w zadaniu pytanie.

127

TESTY
Do sprawdzenia rozwiza zawodnikw uyto 12 testw: POL0.IN test z treci zadania, POL1.IN spirala o 10 krawdziach, POL2.IN spirala o 20 krawdziach, POL3.IN spirala o 30 krawdziach, POL4.IN spirala o 40 krawdziach, POL5.IN spirala o 45 krawdziach, POL6.IN spirala o 50 krawdziach, POL7.IN test poprawnociowy, POL8.IN test wydajnociowy o 20 krawdziach, POL9.IN test wydajnociowy o 30 krawdziach, POL10.IN test wydajnociowy o 40 krawdziach, POL11.IN test wydajnociowy o 50 krawdziach.

Tomasz Wale
autor zadania, opracowanie

Marcin Mucha
program wzorcowy

Agenci
W zwizku z ostatnimi wpadkami swoich agentw, Urzd Ochrony Bajtocji postanowi usprawni dziaalno. Najwikszym dotychczasowym problemem byo bezpieczne urzdzanie spotka agentw. Twj program ma pomc w rozwizaniu tego problemu. Dla podanego opisu sieci drg Bajtocji oraz pocztkowej pozycji dwch agentw, powinien stwierdza, czy moliwe jest bezpieczne spotkanie tych agentw. eby spotkanie uzna za bezpieczne agenci musz przestrzega nastpujcych regu: agenci poruszaj si w dzie, natomiast spotkania odbywaj si wieczorami, kadego dnia agent musi zmieni miejsce pobytu, agenci mog porusza si jedynie po drogach czcych miasta (niestety dodatkowym utrudnieniem jest fakt, i w Bajtocji drogi s jednokierunkowe), agent nie moe jednak porusza si zbyt szybko (mogo by to wzbudza niepotrzebne zainteresowanie) jednego dnia nie moe przemieci si dalej ni do ssiedniego miasta, odlego midzy dwoma miastami poczonymi drog jest na tyle maa, e agent wyruszajcy z pierwszego miasta zawsze dotrze do drugiego miasta przed wieczorem, spotkanie uznaje si za odbyte w momencie, gdy dwaj agenci znajd si tego samego wieczora w tym samym miecie.

Zadanie

Napisz program, ktry: wczyta z pliku tekstowego AGE.IN liczb miast i opis sieci drg Bajtocji, oraz pozycje pocztkowe dwch agentw, stwierdzi, czy moliwe jest ich bezpieczne spotkanie, a jeli tak, to po ilu dniach, zapisze wynik w pliku tekstowym AGE.OUT.

Wejcie
W pierwszym wierszu pliku tekstowego AGE.IN znajduj si dwie liczby cakowite n i m, oddzielone pojedynczym odstpem, gdzie 1 n 250 , 0 m n ( n 1). W drugim wierszu znajduj si dwie liczby cakowite a1 i a2 oddzielone pojedynczym odstpem, 1 a1 , a2 n oraz a1 = a2 , oznaczajce, odpowiednio, pocztkowe pozycje agentw nr 1 i nr 2.

130

Agenci
W m nastpnych wierszach znajduj si pary liczb naturalnych a i b oddzielone pojedynczymi odstpami, 1 a, b n oraz a = b, oznaczajce istnienie drogi z miasta a do miasta b.

Wyjcie
Plik tekstowy AGE.OUT powinien zawiera dokadnie 1 wiersz zawierajcy: dokadnie jedn dodatni liczb cakowit t, oznaczajc minimalny czas (w dniach) potrzebny do zorganizowania bezpiecznego spotkania dwch agentw jeeli do takiego spotkania mona doprowadzi, sowo NIE, gdy nie mona doprowadzi do bezpiecznego spotkania.

Przykad
Dla pliku wejciowego AGE.IN: 6 7 1 5 1 2 4 5 2 3 3 4 4 1 5 4 5 6 poprawn odpowiedzi jest plik tekstowy AGE.OUT: 3

ROZWIZANIE
Sie drg Bajtocji reprezentujemy przez graf G o n wierzchokach (miastach) i m krawdziach (drogach). Pierwszym, najbardziej narzucajcym si rozwizaniem, jest symulacja poruszania si obu agentw. Oznaczmy przez s = (i, j) stan oblicze oznaczajcy, i w tym samym czasie pierwszy agent moe znajdowa si w miecie o numerze i, a drugi w miecie o numerze j. Teraz rozwamy graf G zbudowany na stanach s, ma on n2 wierzchokw i m2 krawdzi. W przypadku posugiwania si grafem G problem sprowadza si do znalezienia najkrtszej cieki z wyrnionego wierzchoka s0 = (a1 , a2 ) do dowolnego wierzchoka postaci (i, i). Poniewa wszystkie krawdzie maj wag 1, wic wystarczy przej graf G wszerz. Nie trzeba konstruowa grafu G wprost, mona take, jak w poniszym przykadzie, dynamicznie generowa jego krawdzie. Schemat algorytmu (Q i Q2 oznaczaj kolejki typu pierwszy wchodzi-pierwszy wychodzi, czyli FIFO):
1: 2: 3:

Q:={a 1 ,a 2 }; { pocztkowo, dla dowolnego i , j : v [i ,j ]=0 } v [a 1 ,a 2 ]:=1;

Agenci
4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:

131

t:=0; while not Q.pusta do begin Q2 :=pusta kolejka; while not Q.pusta do begin (u,v ):=Q.PobierzElement; if (u=v ) then Znaleziono rozwizanie t STOP; for i {k : (u, k) jest krawdzi w G} do for j {k : (v, k) jest krawdzi w G} do if v [i ,j ]=0 then begin v [i ,j ]:=1; Q2 .Dodaj (i ,j ); end end; t:=t+1; Q:=Q2 ; end; Brak rozwizania

Teraz zastanwmy si jak zoono ma powyszy algorytm. Oznaczmy przez K(i, j) koszt jaki trzeba ponie aby wygenerowa nastpniki stanu (i, j). Wwczas K(i, j) = di dj , gdzie dl oznacza liczb krawdzi wychodzcych z wierzchoka l. Poniewa w pesymistycznym przypadku trzeba bdzie rozpatrzy wszystkie stany, cakowity koszt moe wynosi:
i=1..n

n2 +
i=1..n j=1..n

K(i, j) = n2 +
i=1..n j=1..n

d i d j = n2 +

d i

j=1..n

dj =

= n2 +
i=1..n

(di m) = n2 + m
i=1..n 2

di = n2 + m2

czny koszt to O(n + m ). Rozwizanie wzorcowe polega na pewnym ulepszeniu poprzedniego rozwizania. W poprzednim rozwizaniu jedna faza algorytmu polegaa na wykonaniu ruchu oboma agentami. Tym razem podzielimy t faz na dwie czci: ruch pierwszym agentem i ruch drugim agentem. Co prawda takie rozwizanie dwukrotnie powiksza przestrze stanw: s = (i, j) (ten sam stan co w poprzednim rozwizaniu), oraz dochodz nowe stany s = (i , j ), oznaczajce, e pierwszy agent wykona ju swj ruch i znajduje si na pozycji i , natomiast drugi powinien teraz wykona ruch, a na razie znajduje si na pozycji j . Jednak dziki tej metodzie znajdowanie nastpnikw stanw jest nieco mniej kosztowne, dla stanw s = (i, j) potrzeba di operacji, natomiast dla stanw s = (i , j ) potrzeba dj operacji. Tak jak w poprzednim algorytmie, dotarcie do stanu s = (i, i) oznacza, e agenci mog zorganizowa bezpieczne spotkanie.

132

Agenci
Teraz ju moemy naszkicowa schemat algorytmu (Q i Q2 oznaczaj kolejki typu pierwszy wchodzi-pierwszy wychodzi, czyli FIFO):
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:

Q:={a 1 ,a 2 }; { pocztkowo, dla dowolnego i , j : v [i ,j ]=0, oraz v [i ,j ]=0 } v [a 1 ,a 2 ]:=1; t:=0; while not Q.pusta do begin Q2 :=pusta kolejka; {ruch pierwszego agenta} while not Q.pusta do begin (u,v ):=Q.PobierzElement; if (u=v ) then Znaleziono rozwizanie t STOP; for i {k : (u, k) jest krawdzi w G} do if v [i ,v ]=0 then begin v [i ,v ]:=1; Q2 .Dodaj (i ,v ) end end; {ruch drugiego agenta} while not Q2 .pusta do begin (u,v ):=Q2 .PobierzElement; for i {k : (v, k) jest krawdzi w G} do if v [u,i ]=0 then begin v [u,i ]:=1; Q.Dodaj (i ,v ) end end; t:=t+1 end; Brak rozwizania

Analiza zoonoci Niech K(i, j) oznacza koszt poniesiony na znalezienie nastpnikw stanu s = (i, j). Tak wic K(i, j) = di . Analogicznie K (i, j) oznacza koszt dla stanw typu s = (i , j ), a zatem K (i, j) = dj . W pesymistycznym przypadku czny koszt caego algorytmu wynosi:

2n2 +
i=1..n j=1..n

K(i, j)+
i=1..n j=1..n

K (i, j) = 2n2 +
i=1..n j=1..n

di +
i=1..n j=1..n

dj =

Agenci

133

= 2n2 +
i=1..n

n di +
i=1..n

m = 2n2 + n
i=1..n

di + n m = 2n2 + 2nm

Wic to rozwizanie ma zoono O(nm), co daje w pesymistycznym przypadku (dla grafw majcych O(n2 ) krawdzi) O(n3 ) operacji.

Inne rozwizania Innym rozwizaniem, majcym zoono O(dm), gdzie d oznacza minimalny czas potrzebny do zorganizowania bezpiecznego spotkania (lub n2 , jeli takiego spotkania nie mona zorganizowa), jest obliczanie do jakich miast mog doj w i-tym kroku agenci nr 1 i 2. Jeli te dwa zbiory maj cz wspln, oznacza to moliwo spotkania w i-tym dniu. Niestety w niektrych przypadkach czas potrzebny do zoorganizowania spotkania moe by bardzo duy, nawet rzdu n2 . Tak wic w pesymistycznych przypadkach to rozwizanie jest rwnie wolne jak pierwsze. (Zmienne V 1 i V 2 oznaczaj zbiory)
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:

V1 :={a 1 }; V2 :={a 2 }; dl :=0; while (not V1 .pusty and not V2 .pusty and dl < n2 ) do begin dl :=dl +1; jeli istnieje wierzchoek v nalecy do V1 i V2 to Znaleziono rozwizanie; V1 :=wierzchoki v takie, e istnieje wierzchoek u V1 i (u,v ) naley do G; V2 :=wierzchoki v takie, e istnieje wierzchoek u V2 i (u,v ) naley do G end; Brak rozwizania

TESTY
Do sprawdzania rozwiza zawodnikw uyto 16 testw: Testy oznaczone K2 (b1 , b2 , n) oznaczaj testy skadajce si z dwch penych grafw skierowanych (o rozmiarach b1 , b2 ) poczonych ciek dugoci n Testy oznaczone E(n1 , n2 , b1 , b2 ) oznaczaj testy skadajce si z dwch penych grafw skierowanych (o rozmiarach b1 , b2 ) poczone dwoma ciekami o wsplnym kocu, rnicymi si dugoci o 1. Na ciekach tych wystpuj dodatkowo cykle dugoci n1 , n2 .

134

Agenci
AGE0.IN test z treci zadania, AGE1.IN may graf z odpowiedzi negatywn, AGE2.IN may graf z odpowiedzi pozytywn, AGE3.IN K2 (30, 30, 10), AGE4.IN K2 (50, 50, 50), AGE5.IN K2 (100, 100, 50), AGE6.IN K2 (75, 75, 100), AGE7.IN K2 (50, 50, 150), AGE8.IN E(51, 61, 134, 0), AGE9.IN E(53, 59, 124, 10), AGE10.IN E(51, 59, 109, 20), AGE11.IN E(53, 64, 80, 30), AGE12.IN duy graf dwudzielny, n = 180, z odpowiedzi negatywn, AGE13.IN duy graf dwudzielny, n = 250, agenci znajduj si w tej samej czci grafu, AGE14.IN duy graf dwudzielny, n = 150, doczone przejcie gwarantujce rozwizanie, AGE15.IN duy graf dwudzielny, n = 250, z odpowiedzi negatywn. Testy 11 i 12 oraz 14 i 15 zostay zgrupowane.

Adam Malinowski
autor zadania, opracowanie

Tomasz Wale
program wzorcowy

Powtrzenia
Dany jest cig sw nad alfabetem { a , . . . , z }. Naley znale dugo najduszego sowa wystpujcego jako spjny fragment w kadym z danych sw.

Zadanie
Napisz program, ktry: wczyta cig sw z pliku tekstowego POW.IN, obliczy dugo najduszego sowa wystpujcego jako spjny fragment w kadym z podanych sw, zapisze wynik w pliku tekstowym POW.OUT.

Wejcie
W pierwszym wierszu pliku tekstowego POW.IN zapisano liczb n, gdzie 1 n 5 , oznaczajc liczb sw. W kadym z n kolejnych wierszy znajduje si jedno sowo utworzone z maych liter alfabetu angielskiego a , . . . , z . Kade ze sw ma dugo przynajmniej 1 , ale nie wiksz ni 2 000 .

Wyjcie
Plik tekstowy POW.OUT powinien zawiera dokadnie jeden wiersz zawierajcy pojedyncz liczb cakowit rwn dugoci najduszego sowa wystpujcego jako spjny fragment w kadym z danych sw.

Przykad
Dla pliku wejciowego POW.IN: 3 abcb bca acbc poprawn odpowiedzi jest plik tekstowy POW.OUT: 2

ROZWIZANIE
Do rozwizania zadania posuy nam adaptacja struktury danych zwanej sownikiem podsw bazowych. Sownik podsw bazowych to z grubsza rzecz biorc tablica

136

Powtrzenia
nazw wszystkich podsw danego sowa o dugociach bdcych potgami dwjki, przy czym takie same podsowa maj te same nazwy, a rne podsowa o tej samej dugoci rne nazwy (nazwa to po prostu liczba cakowita z zakresu od 1 do dugoci sowa; num[i, k] to nazwa podsowa o dugoci 2k zaczynajcego si na pozycji i w danym sowie). Taka informacja umoliwia nam sprawdzenie w czasie staym, czy dwa podsowa tej samej dugoci s jednakowe, nawet jeli ich dugoci nie s potgami dwjki: nazw identykujc jednoznacznie podsowo dugoci r (2k < r < 2k+1 ) zaczynajce si na pozycji i jest para num[i, k], num[i + r 2k + 1, k] . Rozmiar tej struktury danych, to oczywicie (d), gdzie d jest dugoci sowa, i mona j skonstruowa w takim wanie czasie metod wstpujc (ang. bottom-up): Najpierw, na podstawie kodw poszczeglnych znakw, nadajemy nazwy sowom jednoliterowym. Jeli nadalimy ju nazwy wszystkim podsowom dugoci 2k (czyli wypenilimy wiersz num[k, ] w naszej tablicy), to teraz podsowu dugoci 2k+1 zaczynajcemu si na pozycji i, gdzie 1 i d 2k+1 + 1, nadajemy tymczasow nazw num[i, k], num[i + 2k , k] . Jest to dobra, unikalna nazwa tyle, e nie jest liczb z zakresu od 1 do d, lecz par takich liczb. Zamieniamy teraz nazwy bdce parami na nazwy liczbowe. W tym celu sortujemy wszystkie pary leksykogracznie (kubekowo, zaczynajc od mniej znaczcej wsprzdnej, zob. [7], [13]) i wykonujemy przenumerowanie (takie same wektory bd po posortowaniu leay koo siebie). Nazwy po przenumerowaniu umieszczamy w kolejnych kolumnach tablicy num (oczywicie wraz z kadym wektorem musimy przechowywa numer pozycji pocztku odpowiadajcego mu podsowa). Czas wypeniania kadego wiersza jest liniowy, a liczba wierszy do wypenienia to log d . Szczegy konstrukcji mona znale w ksice [10]. W rozwizaniu wzorcowym obliczamy wsplny sownik dla wszystkich zadanych sw, sklejonych w jedno dugie sowo z separatorami (specjalnymi znakami wystpujcymi tylko jednokrotnie) na granicach sw wejciowych. Separatory wprowadzamy po to, eby unikn odrbnego analizowania podsw przechodzcych przez granice sw wejciowych. eby zaoszczdzi pami, przechowujemy tylko jeden, ostatnio obliczony wiersz tablicy num. Schemat postpowania wyglda nastpujco: Obliczamy nazwy podsw o dugociach bdcych kolejnymi potgami dwjki. Robimy to dopty, dopki istnieje podsowo dugoci 2k wystpujce w kadym ze sw wejciowych. Kiedy ju wiemy, e najdusze podsowo wsplne dla wszystkich sw wejciowych ma dugo mieszczc si w zakresie 2k , . . . , 2k+1 1, to jej dokadn warto wyznaczamy metod bisekcji w k krokach. (Zachodzi tu potrzeba wyznaczenia nazw dla podsw o dugoci p na podstawie nazw dla podsw o dugoci r, gdzie r < p < 2r. Robimy to, posugujc si opisan na pocztku sztuczk, czyli jako nazw tymczasow biorc par nazw zachodzcych na siebie podsw dugoci r pokrywajcych podsowo dugoci p.)

Powtrzenia
Inne rozwizania Przedstawione tu rozwizanie nie jest optymalne. Postawiony w zadaniu problem mona rozwiza w czasie liniowym wzgldem sumy dugoci sw wejciowych. Wymaga to jednak uycia do wyranowanych struktur danych (np. drzew suksowych), raczej trudnych do zaimplementowania podczas piciogodzinnej sesji. W dodatku stopie komplikacji tych struktur mgby spowodowa na tyle due stae narzuty czasowe, e przy okrelonych w zadaniu ograniczeniach na rozmiar danych wejciowych, rozwizanie asymptotycznie optymalne byoby przy testowaniu trudne do odrnienia lub wrcz gorsze, od znacznie prostszego rozwizania opisanego powyej.

137

TESTY
Do sprawdzenia rozwiza zawodnikw uyto 14 testw, niekiedy czonych w grupy. POW0.IN test z treci zadania, POW1.IN prosty test poprawnociowy, POW2.IN test poprawnociowy, sowa skadajce si z rznych liter, POW3.IN test poprawnociowy, trzy identyczne sowa, POW4.IN prosty test poprawnociowy, 4 krtkie sowa losowe, POW5.IN test poprawnociowy, trzy kolejne sowa Fibonacciego, POW6.IN test poprawnociowy, 1 krtkie i 4 dugie sowa, POW7.IN test wydajnociowy, 3 sowa o dugoci 100, POW8.IN test wydajnociowy, 5 sw o dugoci 400, POW9.IN test wydajnociowy, 3 sowa o dugoci 400, POW10.IN test wydajnociowy, 4 sowa o dugoci 1000, POW11.IN test wydajnociowy, 2 sowa o dugoci 1200, POW12.IN test wydajnociowy, 5 sw o dugoci 2000, POW13.IN test wydajnociowy, 5 sw o dugoci 2000.

Tomasz Wale
autor zadania, opracowanie

Marcin Sawicki
program wzorcowy

Promocja
Wielka bajtocka sie supermarketw poprosia Ci o napisanie programu symulujcego koszty wanie przygotowywanej promocji. Przygotowywana promocja ma mie nastpujce zasady: klient, ktry chce wzi udzia w promocji, wpisuje na zapaconym przez siebie rachunku swoje dane i wrzuca go do specjalnej urny, pod koniec kadego dnia promocji z urny wycigane s dwa rachunki: najpierw wybierany jest rachunek opiewajcy na najwiksz kwot, nastpnie wybierany jest rachunek opiewajcy na najmniejsz kwot; klient, ktry zapaci najwikszy rachunek otrzymuje nagrod pienin rwn rnicy pomidzy wysokoci jego rachunku, a wysokoci rachunku opiewajcego na najmniejsz kwot, aby unikn kilkukrotnych nagrd za jeden zakup, oba wybrane wg regu z poprzedniego punktu rachunki nie wracaj ju do urny, ale wszystkie pozostae rachunki dalej bior udzia w promocji. Obroty supermarketu s bardzo due, moesz wic zaoy, e pod koniec kadego dnia, przed wycigniciem rachunkw opiewajcych na najwiksz i najmniejsz kwot, w urnie znajduj si co najmniej 2 rachunki. Twoim zadaniem jest obliczenie na podstawie informacji o wysokociach rachunkw wrzucanych do urny w poszczeglnych dniach promocji, jaki bdzie czny koszt nagrd w caej promocji.

Zadanie
Napisz program, ktry: wczyta z pliku tekstowego PRO.IN list wysokoci rachunkw wrzucanych do urny w poszczeglnych dniach promocji, obliczy czny koszt nagrd wypacanych w kolejnych dniach promocji, zapisze wynik w pliku tekstowym PRO.OUT.

Wejcie
W pierwszym wierszu pliku tekstowego PRO.IN znajduje si jedna dodatnia liczba cakowita n, gdzie 1 n 5000 , oznaczajca czas trwania promocji w dniach. W kadym z kolejnych n wierszy znajduje si cig nieujemnych liczb cakowitych pooddzielanych pojedynczymi odstpami. Liczby w ( i + 1)-szym wierszu pliku okrelaj wysokoci rachunkw wrzuconych do urny w i-tym dniu promocji. Pierwsza w wierszu

140

Promocja
liczba k, 0 k 10 5 , jest liczb rachunkw z danego dnia, a kolejne k liczb to dodatnie liczby cakowite bdce wysokociami poszczeglnych rachunkw, kada z tych liczb jest nie wiksza ni 10 6 . czna liczba rachunkw wrzuconych do urny podczas caej promocji nie przekracza 10 6 .

Wyjcie
Plik tekstowy PRO.OUT powinien zawiera dokadnie jedn liczb cakowit rwn cznemu kosztowi nagrd wypacanych podczas caej promocji.

Przykad
Dla pliku wejciowego PRO.IN: 5 3 1 2 3 2 1 1 4 10 5 5 1 0 1 2 poprawn odpowiedzi jest plik tekstowy PRO.OUT: 19

ROZWIZANIE
Przy rozwizaniu tego zadania bardzo pomocna bdzie struktura danych umoliwiajca wykonywanie nastpujcych operacji: ADD(x) dodanie elementu x do struktury; MIN podanie wartoci minimalnego elementu w strukturze; MAX podanie wartoci maksymalnego element w strukturze; ExtractMin usunicie minimalnego elementu; ExtractMax usunicie maksymalnego elementu. Zwyky kopiec (zob. [13]) oferuje efektywn implementacj trzech z tych operacji: ADD, MIN, ExtractMin (lub ADD, MAX, ExtractMax). Rozwizaniem moe by struktura skadajc si z dwch poczonych kopcw, jeden z nich udostpnia operacje ADD, MIN, ExtractMin, natomiast drugi ADD, MAX, ExtractMax. W takim rozwizaniu decydujemy si na pewn rozrzutno i kady element nalecy do struktury bdziemy pamita podwjnie: w pierwszym i drugim kopcu, dodatkowo z kadym elementem jest zwizany wskanik do bliniaczego elementu w drugim kopcu. Operacje MIN, MAX odwouj si do odpowiednich kopcw i wymagaj staego czasu. Operacja ADD wymaga dodania elementu do obu kopcw, oraz uaktualnienia wskanikw, i tak jak w zwykym kopcu wymaga czasu O(logn). Operacje ExtractMin, ExtractMax sprowadzaj si do wykonania odpowiedniej operacji na odpowiednim kopcu (tym ktry oferuje t operacj), oraz usuniciu elementu bliniaczego z drugiego kopca (poniewa pamitamy wskanik do tego elementu, moemy wykona i t operacj w czasie

Promocja
O(logn)). Zatem cao rwnie wymaga czasu O(logn). Przy wszystkich modykacjach, naley zwraca baczn uwag na uaktualnianie wskanikw midzy oboma kopcami.
Rys. 1 Przykad podwjnego kopca

141

1 2 5 4 3

5 3 4 1 2

Rozwizanie 1 Majc do dyspozycji powysz stuktur danych, schemat algorytmu jest ju oczywisty. Dla kadego dnia dodajemy do struktury rachunki, a nastpnie wyjmujemy z niej jeden najwikszy i jeden najmniejszy, oraz odpowiednio zwikszamy cakowity koszt promocji. Niestety takie rozwizanie, ze wzgldu na bardzo du liczb rachunkw, ktre mogy pojawi si w promocji, nie jest akceptowalne ze wzgldu na ogranicznia pamiciowe. Naley zastanowi si, jakie rachunki na pewno nie maj szans na wyjcie z urny. Mona spostrzec, e gdy mamy w strukturze wicej ni 2n rachunkw, to szanse na wycignicie z urny ma jedynie n najwikszych i n najmniejszych, natomiast wszystkie pozostae, rodkowe rachunki, nie maj ju takiej szansy i mona je pomin. To spostrzeenie prowadzi ju do ulepszonego rozwizania, ktre bdzie wymaga jedynie pamici rzdu O(n).

Rozwizanie 2 Dopki liczba rachunkw w strukturze S nie przekracza 2n stosuj rozwizanie 1. Jeli liczba rachunkw osignie 2n, przepisz n najmiejszych do struktury Smin , natomiast n najwikszych do struktury Smax . Struktur S mona ju usunc, natomiast wszystkie dalsze operacj bd wykonywane na Smin i Smax . Dodawanie nowego rachunku x wyglda nastpujco:

142

Promocja
jeli x < Smin .M AX, to usuwamy z Smin element Smin .M AX (operacja Smin .ExtractM ax) i dodajemy x do Smin ; jeli x > Smax .M IN , to postpujemy symetrycznie jak w poprzednim przypadku (zamieniajc MAX na MIN i Smin na Smax ); w przeciwnym przypadku moemy zapomnie o tym rachunku. Chcc wydoby rachunek o najmniejszej wartoci wykonujemy operacj ExtractM in na Smin i analogicznie, chcc otrzyma rachunek o najwikszej wartoci wykonujemy operacj ExtractM ax na Smax .

TESTY
Do sprawdzania rozwiza zawodnikw uyto 10 testw opisanych poniej: PRO1-6.IN proste testy poprawnociowe, PRO7.IN trudny test wydajnociowy, n = 5000, K = 100006, PRO8.IN prosty test, prawie kadego dnia dwa rachunki, n = 5000, K = 210004, PRO9.IN duy test wydajnociowy, n = 5000, K = 1000000, PRO10.IN duy, losowy test wydajnociowy, n = 5000, K = 999800.

XI Midzynarodowa Olimpiada Informatyczna IOI99, Antayla-Belek Turcja, padziernik 1999


treci zada

Krzysztof Diks, Marcin Kubica


przekad

Kwiaciarnia
Jeste wacicielem kwiaciarni i przygotowujesz okno wystawowe. Dysponujesz F bukietami kwiatw kady innego rodzaju. Masz te do dyspozycji co najmniej tyle samo wazonw, ustawionych w rzdzie na parapecie okna. Wazony s przymocowane na stae do parapetu i ponumerowane kolejno od 1 do V , gdzie V jest liczb wazonw. Skrajnie lewy wazon ma numer 1 , a skrajnie prawy ma numer V . Bukiety s jednoznacznie ponumerowane od 1 do F . Te numery s wane z nastpujcego powodu okrelaj one kolejno wystpowania bukietw w wazonach. Dla i < j bukiet nr i musi zawsze znajdowa si w wazonie pooonym na lewo od wazonu, w ktrym znajduje si bukiet nr j. Np., jeli azalie maj nr 1 , begonie maj nr 2 , a cyprysy maj nr 3 , to ich bukiety musz znajdowa si w wazonach wanie w takim porzdku wazon z azaliami musi by na lewo od wazonu z begoniami, a ten na lewo od wazonu z cyprysami. Jeli mamy wicej wazonw ni bukietw, to nadmiarowe wazony pozostaj puste. W kadym wazonie moe znajdowa si co najwyej jeden bukiet kwiatw. Wazony (tak jak bukiety kwiatw) maj swoje charakterystyki. Wkadajc bukiet kwiatw do wazonu uzyskujemy okrelony efekt estetyczny, wyraany liczb cakowit. W tabeli poniej przedstawiono liczby wyraajce przykadowe efekty estetyczne. W przypadku gdy wazon jest pusty daje to efekt estetyczny rwny 0. Bukiety 1 1 (azalie) 2 (begonie) 3 (cyprysy) 7 5 -21 2 23 21 5 Wazony 3 -5 -4 -4 4 -24 -10 -20 5 16 23 20

Zgodnie z powysz tabel, azalie wygldayby wspaniale w wazonie nr 2, a strasznie w wazonie nr 4. Dla osignicia najlepszego efektu musisz umieci bukiety w wazonach, zachowujc podany porzdek i maksymalizujc sum efektw estetycznych. Jeli jest kilka takich rozmieszcze, to kade z nich jest dopuszczalne. Musisz znale jedno z nich.

Zaoenia
1 F F. F V 100 , gdzie F jest liczb bukietw kwiatw. Bukiety s ponumerowane od 1 do 100 , gdzie V jest liczb wazonw. 50 , gdzie Aij jest efektem estetycznym umieszczenia i-go bukietu w j-tym

50 Aij wazonie.

146

Kwiaciarnia
Wejcie
Nazw pliku wejciowego jest: flower.inp. Pierwszy wiersz zawiera dwie liczby: F , V . Kolejnych F wierszy ma nastpujc posta: kady z nich zawiera V liczb cakowitych liczba Aij jest j-t liczb w (i + 1 )-ym wierszu.

Wyjcie
Plik wyjciowy flower.out musi by plikiem tekstowym i zawiera dwa wiersze: Pierwszy wiersz zawiera sum efektw estetycznych twojego rozmieszczenia. Drugi wiersz musi zawiera to rozmieszczenie w postaci cigu F liczb cakowitych, w ktrym k-ty element jest numerem wazonu zawierajcego bukiet nr k.

Przykad
flower.inp: 3 5 7 23 -5 -24 16 5 21 -4 10 23 -21 5 -4 -20 20 flower.out: 53 2 4 5

Ocena
Ograniczenie na czas dziaania programu wynosi 2 sekundy. Nie mona otrzyma czci punktw za pojedynczy test.

Krzysztof Diks, Marcin Kubica


przekad

Kody
Dany jest zbir sw kodowych oraz tekst. Tekst zawiera komunikat zoony ze sw kodowych, umieszczonych w tekcie w specjalny (by moe niejednoznaczny) sposb. Zarwno sowa kodowe, jak i tekst, s cigami zbudowanymi tylko z wielkich i maych liter alfabetu angielskiego. Rozrnienie wielkich i maych liter jest istotne. Dugo sowa kodowego okrela si w zwyky sposb. Na przykad sowo kodowe ALL ma dugo 3. Litery sowa kodowego nie musza wystpowa w tekcie kolejno po sobie. Np., sowo kodowe ALL zawsze wystpuje we fragmencie tekstu postaci AuLvL, gdzie u i v oznaczaj dowolne (by moe puste) cigi kolejnych liter. O AuLvL mwimy, e jest pokryciem sowa ALL. W oglnoci, pokryciem sowa kodowego nazywamy fragment tekstu, w ktrym pierwsza i ostatnia litera s takie same jak w sowie kodowym, a samo sowo moemy otrzyma przez usunicie pewnych (by moe adnych) liter z tego fragmentu. Zauwamy, ze sowo kodowe moe mie wiele pokry lub moe ich nie mie w ogle. Podobnie, ten sam fragment tekstu moe by pokryciem wicej ni jednego sowa kodowego. Pokrycie opisujemy za pomoc pozycji jego pocztku (jego pierwszej litery) i koca (jego ostatniej litery) w tekcie. (Pierwsza litera tekstu znajduje si na pozycji 1.) Mwimy, e pokrycia c1 i c2 nie zachodz na siebie, gdy koniec c2 znajduje si na wczeniejszej pozycji ni pocztek c1 , lub symetrycznie. Aby odczyta ukryty w tekcie komunikat masz znale rozwizanie. Rozwizanie to zbir elementw, z ktrych kady skada si ze sowa kodowego i jego pokrycia, speniajcy nastpujce warunki: (a) pokrycia nie zachodz na siebie parami, (b) dugo adnego pokrycia nie przekracza 1000, (c) czna dugo wystpie sw kodowych jest maksymalna (liczc kade wystpienie sowa kodowego w elemencie). Jeli jest wicej ni jedno rozwizanie, naley poda jedno z nich.

Zaoenia
1 1 N 100 , gdzie N jest liczb sw kodowych.

adne sowo kodowe nie jest dusze ni 100 . dugo tekstu 1 000 000 .

Mwimy, e pokrycie c sowa kodowego w jest prawostronnie minimalne jeli aden waciwy preks (tzn. jego pocztkowy fragment, krtszy od niego samego) pokrycia c nie jest pokryciem w. Np., AAALAL jest prawostronnie minimalnym pokryciem sowa ALL, natomiast AAALALAL takim pokryciem nie jest. Tekst zawarty w danych wejciowych zawsze spenia nastpujce warunki: (a) dla kadej pozycji w tekcie liczba prawostronnie minimalnych pokry, zawierajcych tak pozycj, nie przekracza 2500 ,

148

Kody
(b) liczba prawostronnie minimalnych pokry nie przekracza 10 , 000 .

Wejcie
Dane wejciowe s zawarte w dwch plikach tekstowych: words.inp i text.inp. Plik words.inp zawiera list sw kodowych, natomiast plik text.inp zawiera tekst wejciowy. Pierwszy wiersz pliku words.inp zawiera liczb sw kodowych N . Kady z kolejnych N wierszy zawiera po jednym sowie kodowym zapisanym jako cig liter, bez znakw odstpu midzy nimi. Sowa kodowe s ponumerowane od 1 do N zgodnie z porzdkiem ich wystpowania w pliku words.inp. W pliku text.inp zapisano cig liter (zakoczony znakami koca wiersza i koca pliku). Plik ten nie zawiera znakw odstpu. Zalecenia dla programujcych w Pascalu: Zaleca si deklarowanie plikw wejciowych jako plikw typu text, w odrnieniu od plikw znakowych (file of char).

Wyjcie
Plikiem wyjciowym jest plik tekstowy codes.out. W pierwszym wierszu naley zapisa czn dugo wystpie sw kodowych obliczon przez Twj program. Kady z kolejnych wierszy powinien zawiera opis jednego elementu Twojego rozwizania. Wiersz taki zawiera trzy liczby cakowite i, s, e, gdzie i jest numerem sowa kodowego majcego pokrycie zaczynajce si na pozycji s i koczcego si na pozycji e. Kolejno opisw elementw moe by dowolna.

Przykad
words.inp: 4 RuN RaBbit HoBbit StoP text.inp: StXRuYNvRuHoaBbvizXztNwRRuuNNP codes.out: 12 2 9 21 1 4 7 1 24 28 (Uwaga: W tekcie jest ukryty komunikat RuN RaBbit RuN. (Ukryty jest tam rwnie komunikat RuN HoBbit RuN). Pamitaj, eby nie wypisywa treci komunikatu do pliku wyjciowego.)

Kody
Ocena
Czas dziaania twojego programu nie moe przekracza 10 sekund. Nie mona otrzyma czci punktw za pojedynczy test.

149

Krzysztof Diks, Marcin Kubica


przekad

Podziemne miasto
Jeste uwiziony w jednym z podziemnych miast Kapadocji. Bdzc w ciemnociach znalaze przypadkiem plan miasta. Niestety na planie nie jest zaznaczone miejsce, w ktrym jeste. Badanie miasta pomoe Ci je znale i na tym polega Twoje zadanie. Plan jest prostoktna siatk jednostkowych kwadratw. Kady kwadrat jest albo otwartym kawakiem przestrzeni, krcej, jest otwarty i wtedy jest oznaczony liter O, albo jest czci muru i wtedy jest oznaczony liter W. Na planie jest zaznaczony kierunek pnocny. Na szczcie masz przy sobie kompas i moesz poprawnie zorientowa swj plan. Na pocztku jeste w kwadracie otwartym. Wszystko zaczyna si od wywoania bezargumentowej procedury (albo funkcji) start. Moesz bada miasto z pomoc procedur (lub funkcji) look oraz move. Moesz zadawa pytania w postaci wywoania funkcji look(dir), gdzie dir oznacza kierunek, w ktrym spogldasz, przedstawiony jako jedna z liter N, S, E oraz W, oznaczajcych odpowiednio pnoc, poudnie, wschd i zachd. Zamy teraz, i wartoci argumentu wywoania dir jest N. Odpowiedzi bdzie litera O, jeli kwadrat na pnoc od Ciebie jest otwarty, za W jeli jest czci muru. Podobnie mona spoglda w innych kierunkach i zbiera informacje o innych ssiednich kwadratach. Moesz wej na jeden z czterech ssiednich kwadratw, wywoujc move(dir), gdzie dir oznacza kierunek kroku wykonywanego w opisany wyej sposb. Moesz przechodzi tylko na kwadraty otwarte. Prba wejcia na kwadrat bdcy czci muru byaby cikim bdem. Do kadego otwartego kwadratu w miecie mona doj z dowolnego innego otwartego kwadratu. Masz znale, z pomoc najmniejszej moliwej liczby spojrze (wywoa procedury look(dir)), pooenie otwartego kwadratu, w ktrym znalaze plan. Zaraz po znalezieniu tego pooenia musisz go przekaza z pomoc wywoania procedury finish(x,y), gdzie x jest wsprzdn poziom (zachd-wschd), za y jest wsprzdna pionowa (poudnie-pnoc) pooenia.

Zaoenia
3 U 100 , gdzie U jest szerokoci planu, to znaczy dugoci mierzon liczb kwadratw w kierunku poziomym (zachd-wschd). 3 V 100 , gdzie V jest wysokoci planu, to znaczy dugoci mierzon liczb kwadratw w kierunku (poudnie-pnoc). Miasto jest otoczone murami, ktre s przedstawione na planie. Poudniowo-zachodni rg miasta ma wsprzdne (1 , 1 ), za pnocno-wschodni ma wsprzdne (U, V ).

Wejcie
Plikiem wejciowym jest plik tekstowy under.inp. Pierwszy wiersz zawiera dwie liczby: U , V .

152

Podziemne miasto
Kady z nastpnych V wierszy zawiera wiersz planu w kierunku poziomym. Kady wiersz skada si z U znakw, a x-ty znak w (V y + 2 )-im wierszu pliku wejciowego podaje informacje o kwadracie planu, majcym wsprzdne (x, y): jest to albo litera W oznaczajca mur, albo litera O oznaczajca otwarty kwadrat. Dane w tych wierszach nie s pooddzielane adnymi odstpami.

Wyjcie
Nie generuje si adnego pliku wyjciowego. Wynik znaleziony przez Twj program naley przekaza wywoujc procedur finish(x,y).

Przykad
under.inp: 5 8 WWWWW WWWOW WWWOW WOOOW WOWOW WOOWW WWOOW WWWWW Moliwa interakcja, koczca si poprawnym wywoaniem procedury finish: Interaction: Start() look(N) W look(E) O move(E) look(E) W finish(3,5)

Wytyczne dla programujcych w Pascalu


Powiniene mie w swoim pliku rdowym zapisane: uses undertpu; Ten modu zapewni Ci dostp do: procedure start; naley wywoa w pierwszej kolejnoci function look (dir:char):char; procedure move (dir:char); procedure finish (x,y:integer); wywoa jako ostatni

Wytyczne dla programujcych w C/C++


Powiniene mie w swoim pliku rdowym: #include under.h Zapewni Ci to nastpujce deklaracje:

Podziemne miasto
start (void); /* naley wykona w pierwszej kolejnoci*/ look (char); move (char); finish (int,int); /* wykona jako ostatni */ Utwrz rwnie projekt, nazwany under, ktry powinien zawiera Twj program oraz bibliotek suc do interakcji, nazwana underobj.obj. eby utworzy projekt, naley wybra z menu project opcje open, a nastpnie za pomoc opcji add item doczy twj plik rdowy (under.c lub under.cpp) oraz plik underobj.obj. W trakcie kompilacji korzystaj z modelu pamici LARGE. (UWAGA: Jest to zmiana ustalenia podanego w Regulaminie Zawodw.) void char void void

153

Ocena
Ograniczenie na czas dziaania programu wynosi 5 sekund. Aby otrzyma maksymaln liczb punktw A za test, liczba wywoa x funkcji look nie moe przekracza ograniczenia M ustalonego przez program oceniajcy. Liczba M jest wiksza (>) od minimum. W szczeglnoci, M nie zaley od tego, czy kolejno kierunkw spogldania jest zgodna, czy przeciwna do kierunku ruchu wskazwek zegara. Jeli twj program wywoa funkcje look wicej ni (>) M razy, ale mniej ni (<) dwa razy M , to moesz otrzyma cz punktw. W takim przypadku liczba punktw jest wyliczana zgodnie z nastpujc formu (zaokrglajc do najbliszej liczby cakowitej): A A( 2 M x)/M 0 gdy gdy gdy x M M < x < 2M x 2M

Jeli twj program zachowa si w sposb niedozwolony, to otrzymasz 0 punktw. Niedozwolone zachowania programu w tym zadaniu to: wywoanie procedury lub funkcji bibliotecznej z niedozwolonym parametrem, np. ze znakiem nie oznaczajcym kierunku, prba wejcia w cian, nie przestrzeganie wytycznych.

Jak testowa program


Utwrz plik tekstowy place.txt zawierajcy miejsce znalezienia planu. Uruchom program. Obejrzyj wyniki znajdujce si w pliku result.txt. Plik place.txt powinien zawiera dokadnie jeden wiersz, w ktrym zapisano wsprzdne (poziom i pionow) miejsca znalezienia planu. Musisz utworzy wasny plik wejciowy under.inp. Plik result.txt bdzie skada si z dwch wierszy. W pierwszym wierszu znajd si argumenty x i y wywoanej przez Ciebie procedury finish (x,y). Drugi wiersz bdzie zawiera komunikat postaci You used look nnn times, co si tumaczy na Uye look nnn razy. Pamitaj, e suy to tylko sprawdzeniu zgodnoci twojego programu z bibliotek. Nie ma to nic wsplnego z poprawnoci Twojego rozwizania.

Krzysztof Diks, Marcin Kubica


przekad

wiata drogowe
W miecie Dingilville wprowadzono niezwyky sposb sterowania ruchem ulicznym. S tam skrzyowania i czce je drogi. Pomidzy dowolnymi dwoma skrzyowaniami jest co najwyej jedna droga. adna droga nie czy skrzyowania z nim samym. Czas przejazdu kad drog jest taki sam dla obu kierunkw jazdy. Na kadym skrzyowaniu jest jedno wiato, ktre w kadym momencie jest albo niebieskie, albo purpurowe. wiato na kadym skrzyowaniu zmienia si cyklicznie: niebieskie wieci przez pewien okres czasu, a potem purpurowe przez pewien okres czasu, itd. Wolno przejecha drog czc dwa skrzyowania wtedy i tylko wtedy, gdy w momencie ruszania wiata na obu tych skrzyowaniach maj taki sam kolor. Jeeli pojazd przyjeda na skrzyowanie dokadnie w chwili zmiany wiate na skrzyowaniu(-ach), musisz przyj nowe kolory wiate. Pojazdy mog czeka na skrzyowaniach. Masz plan miasta pokazujcy: czasy przejazdu dla wszystkich drg (liczby cakowite), czasy trwania kolorw wiate na kadym skrzyowaniu (liczby cakowite), pocztkowy kolor wiata i czas (liczba cakowita) pozostay do jego zmiany, dla kadego skrzyowania. Masz znale sposb przejazdu w najkrtszym czasie, od zadanego skrzyowania pocztkowego do zadanego skrzyowania kocowego, zaczynajc w momencie rozpoczcia ruchu. W przypadku, gdy istnieje wiele takich sposobw przejazdu, masz poda tylko jeden z nich.

Zaoenia
2 N 300 , gdzie N jest liczb skrzyowa. Skrzyowania s ponumerowane od 1 do N . Numery te identykuj skrzyowania. 1 1 M lij 14 000 , gdzie M jest liczb drg. 100 , gdzie lij jest czasem przejazdu drog czc skrzyowania i oraz j.

1 tic 100 , gdzie tic jest czasem trwania wiata koloru c na skrzyowaniu i. Wartoci c moe by B dla koloru niebieskiego i P dla purpurowego. 1 ric tic , gdzie ric jest czasem pozostaym do zmiany pocztkowego koloru c wiata na skrzyowaniu i.

Wejcie
Plik wejciowy jest plikiem tekstowym o nazwie lights.inp. Pierwszy wiersz zawiera dwie liczby: numer skrzyowania pocztkowego i numer skrzyowania kocowego.

156

wiata drogowe
Drugi wiersz zawiera dwie liczby: N , M . Nastpne N wierszy zawiera informacje o N skrzyowaniach. (i + 2 )-gi wiersz pliku wejciowego zawiera informacje o skrzyowaniu nr i: Ci , ric , tiB , tiP , gdzie Ci ma warto B lub P oznaczajc pocztkowy kolor wiata na skrzyowaniu i. Dalsze M wierszy zawiera informacje o M drogach. Kady wiersz ma posta: i, j, lij , gdzie i oraz j s numerami skrzyowa, ktre dana droga czy.

Wyjcie
Plik wyjciowy jest plikiem tekstowym o nazwie lights.out. Jeli istnieje sposb przejazdu: Pierwszy wiersz zawiera czas najkrtszego przejazdu od skrzyowania pocztkowego do skrzyowania kocowego. Drugi wiersz zawiera opis szukanego sposobu przejazdu - cig kolejnych skrzyowa, przez ktre naley przejecha. W szczeglnoci, pierwsza liczba w tym wierszu bdzie numerem skrzyowania pocztkowego, a ostatnia numerem skrzyowania kocowego. Jeli szukany sposb przejazdu nie istnieje: Pojedynczy wiersz zawierajcy liczb 0.

Przykad
lights.inp: 1 4 4 5 B 2 16 99 P 6 32 13 P 2 87 4 P 38 96 49 1 2 4 1 3 40 2 3 75 2 4 76 3 4 77 lights.out: 127 1 2 4

Ocena
Ograniczenie na czas dziaania Twojego programu wynosi 2s. Nie mona uzyska czci punktw za pojedynczy test.

Krzysztof Diks, Marcin Kubica


przekad

Spaszczanie
W pewnej jednoosobowej grze ustawia si w rzdzie N stosw tak, e kady z nich zawiera pewn liczb (by moe zero) krkw. Zobacz rysunek 1. Stosy s ponumerowane od 1 do N w ten sposb, e stosy 1 i N s na kocach. Ruch w tej grze polega na tym, e gracz wskazuje pewien stos, powiedzmy p, oraz podaje liczb, powiedzmy m. Powoduje to przeoenie po m krkw ze stosu p na kady z ssiednich stosw. Zobacz przykad na rysunku 2. Stos p ma dwch ssiadw, p 1 oraz p + 1 , o ile 1 < p < N , ma ssiada 2 , gdy p = 1 , oraz ssiada N 1 , gdy p = N . Zauwa, e aby mona byo wykona taki ruch, stos p musi zawiera co najmniej 2 m krkw, jeli ma dwch ssiadw i musi zawiera przynajmniej m krkw, jeli ma tylko jednego ssiada. Celem gry jest spaszczenie wszystkich stosw przez zrwnanie liczb zawartych w nich krkw w moliwie najmniejszej liczbie ruchw. W przypadku gdy istnieje wiele rozwiza, masz poda jedno z nich.

Stosy: 1 2 3 4 5

Rys. 1. Piec stosw z 0, 7, 8, 1 i 4 krkami.

Zaoenia
Gwarantuje si, e zawsze mona spaszczy dane stosy w co najwyej 10,000 ruchw. 2 0 N Ci 200 2 000 , gdzie Ci to pocztkowa liczba krkw na stosie nr i (1 i N ).

Wejcie
Plikiem wejciowym jest plik tekstowy flat.inp. Zawiera on dwa wiersze. Pierwszy wiersz: N . Drugi wiersz zawiera N liczb cakowitych: i-ta z nich jest wartoci Ci .

Wyjcie
Plikiem wyjciowym jest plik tekstowy flat.out. Pierwszy wiersz: liczba ruchw. (Oznaczmy te liczb przez M .)

158

Spaszczanie
Kady z kolejnych M wierszy zawiera po dwie liczby reprezentujce ruch: p i m. Ruchy musz by zapisane w pliku wyjciowym w takiej samej kolejnoci, w jakiej s wykonywane. Tak wic pierwszy ruch powinien by zapisany w drugim wierszu pliku.

Przykad
flat.inp: 5 0 7 8 1 4 flat.out: 5 5 2 3 4 2 4 3 1 4 2

Ocena
Limit na czas dziaania dla Twojego programu wynosi 3 sekundy. Aby uzyska pen liczb punktw, A, liczba Twoich ruchw, x, nie moe przekracza pewnej liczby B ustalonej przez program oceniajcy. B nie musi by rwne minimalnej liczbie ruchw. W rzeczywistoci B jest ustalane na podstawie liczby ruchw pewnej bardzo prostej strategii (unikajcej zbdnych ruchw) oraz redniej liczby krkw na stosie. W tym zadaniu mona otrzyma cz punktw za pojedynczy test. Punkty, ktre otrzymasz zostan wyliczone jako zaokrglenie do najbliszej liczby cakowitej wartoci okrelonej nastpujc formu: A 2 A( 3 B x)/B 2 0 jeli jeli jeli x B B < x < 3B 2 x 3B 2

Krzysztof Diks, Marcin Kubica


przekad

Pas ziemi
Mieszkacy Dingiville prbuj znale lokalizacj dla lotniska. Maj przed sob map. Mapa jest prostoktn siatk jednostkowych kwadratw. Kady kwadrat jest identykowany przez par wsprzdnych (x, y), gdzie x jest wsprzdn poziom (zachd-wschd), a y jest wsprzdn pionow (poudnie-pnoc). Dla kadego kwadratu podana jest jego wysoko. Twoim zadaniem jest znale prostoktny obszar (zbudowany z jednostkowych kwadratw) o najwikszej powierzchni (tj. liczbie zawartych w nim kwadratw) oraz taki, e: (a) rnica wysokoci midzy najwyszym i najniszym kwadratem obszaru nie przekracza podanego ograniczenia C, oraz (b) szeroko obszaru (tzn. liczba kwadratw w kierunku zachd-wschd) wynosi co najwyej 100. W przypadku gdy jest wiele takich obszarw naley poda jeden z nich.

Zaoenia
1 U 700 , 1 V 700 , gdzie U i V s wymiarami mapy. Dokadniej, U jest liczb kwadratw w kierunku zachd-wschd, a V liczb kwadratw w kierunku poudnie-pnoc. 0 C 10

30 000 Hxy 30 000 , gdzie liczba cakowita Hxy jest wysokoci kwadratu o wsprzdnych (x, y), 1 x U , 1 y V . Poudniowo-zachodni rg mapy ma wsprzdne (1 , 1 ), a rg pnocno-wschodni ma wsprzdne (U, V ).

Wejcie
Plikiem wejciowym jest plik tekstowy o nazwie land.inp. Pierwszy wiersz zawiera trzy liczby cakowite: U , V i C. Kady z kolejnych V wierszy zawiera liczby cakowite Hxy , dla x = 1 , . . . , U . Dokadniej, Hxy jest x-t liczb w (V y + 2 )-gim wierszu.

Wyjcie
Wynikiem jest plik tekstowy land.out zoony z jednego wiersza zawierajcego cztery liczby cakowite: Xmin , Ymin , Xmax , Ymax . Opisuj one znaleziony obszar ( Xmin , Ymin ) s wsprzdnymi jego poudniowo-zachodniego rogu, a ( Xmax , Ymax ) s wsprzdnymi jego pnocno-wschodniego rogu.

160

Pas ziemi
Przykad
land.inp: 10 15 4 41 40 41 38 39 40 43 40 44 41 39 40 38 38 33 39 39 40 39 39 39 40 41 38 36 39 39 39 31 37 36 41 40 40 40 42 42 40 44 40 41 41 40 39 47 45 49 43 42 41 41 39 41 44 49 43 45 40 42 42

39 36 38 36 39 39 39 41 41 38 39 43 40 46 46

39 37 40 37 40 38 40 40 40 40 40 41 39 41 42

40 35 41 32 40 39 39 39 39 39 41 41 42 42 44

42 39 38 36 41 39 41 41 39 39 40 40 40 41 40

40 42 35 38 43 39 40 40 39 37 39 39 42 42 42

40 42 37 40 41 42 41 40 39 41 40 42 42 42 41

y(N )

41 39 44 38 39 39 36 31 40 42 41 47 42 41 45

40 40 41 38 40 40 39 37 40 40 41 45 41 44 40

41 43 39 33 39 41 39 36 40 44 40 49 41 49 42 x(E)

38 40 40 39 39 38 39 41 42 40 39 43 39 43 42

39 36 38 36 39 39 39 41 41 38 39 43 40 46 46

39 37 40 37 40 38 40 40 40 40 40 41 39 41 42

40 35 41 32 40 39 39 39 39 39 41 41 42 42 44

42 39 38 36 41 39 41 41 39 39 40 40 40 41 40

40 42 35 38 43 39 40 40 39 37 39 39 42 42 42

40 42 37 40 41 42 41 40 39 41 40 42 42 42 41

Rys. 1. Przykadowe rozwizanie dla danych z land.inp

land.out: 4 5 8 11

Pas ziemi
Ocena
Ograniczenie czasowe na czas dziaania Twojego programu wynosi 60 sekund. Nie mona otrzyma czci punktw za pojedynczy test.

161

Literatura
Poniej, oprcz pozycji cytowanych w niniejszej publikacji, zamieszczono inne opracowania polecane zawodnikom Olimpiady Informatycznej. [1] I Olimpiada Informatyczna 1993/1994, WarszawaWrocaw 1994 [2] II Olimpiada Informatyczna 1994/1995, WarszawaWrocaw 1995 [3] III Olimpiada Informatyczna 1995/1996, WarszawaWrocaw 1996 [4] IV Olimpiada Informatyczna 1996/1997, Warszawa 1997 [5] V Olimpiada Informatyczna 1997/1998, Warszawa 1998 [6] VI Olimpiada Informatyczna 1998/1999, Warszawa 1999 [7] A. V. Aho, J. E. Hopcroft, J. D. Ullman Projektowanie i analiza algorytmw komputerowych, PWN, Warszawa 1983 [8] L. Banachowski, A. Kreczmar Elementy analizy algorytmw, WNT, Warszawa 1982 [9] L. Banachowski, A. Kreczmar, W. Rytter Analiza algorytmw i struktur danych, WNT, Warszawa 1987 [10] L. Banachowski, K. Diks, W. Rytter Algorytmy i struktury danych, WNT, Warszawa 1996 [11] J. Bentley Pereki oprogramowania, WNT, Warszawa 1992 [12] I. N. Bronsztejn, K. A. Siemiendiajew Matematyka. Poradnik encyklopedyczny, PWN, Warszawa 1996 [13] T. H. Cormen, C. E. Leiserson, R. L. Rivest Wprowadzenie do algorytmw, WNT, Warszawa 1997 [14] Elementy informatyki. Pakiet oprogramowania edukacyjnego, Instytut Informatyki Uniwersytetu Wrocawskiego, OFEK, WrocawPozna 1993. [15] Elementy informatyki: Podrcznik (cz. 1), Rozwizania zada (cz. 2), Poradnik metodyczny dla nauczyciela (cz. 3), pod redakcj M. M. Sysy, PWN, Warszawa 1996 [16] G. Graham, D. Knuth, O. Patashnik Matematyka konkretna, PWN, Warszawa 1996 [17] D. Harel Algorytmika. Rzecz o istocie informatyki, WNT, Warszawa 1992 [18] J. E. Hopcroft, J. D. Ullman Wprowadzenie do teorii automatw, jzykw i oblicze, PWN, Warszawa 1994

164

Literatura
[19] W. Lipski Kombinatoryka dla programistw, WNT, Warszawa 1989 [20] E. M. Reingold, J. Nievergelt, N. Deo Algorytmy kombinatoryczne, WNT, Warszawa 1985 [21] K. A. Ross, C. R. B. Wright Matematyka dyskretna, PWN, Warszawa 1996 [22] M. M. Syso Algorytmy, WSiP, Warszawa 1998 [23] M. M. Syso Piramidy, szyszki i inne konstrukcje algorytmiczne, WSiP 1998 [24] M. M. Syso, N. Deo, J. S. Kowalik Algorytmy optymalizacji dyskretnej z programami w jzyku Pascal, PWN, Warszawa 1993 [25] R. J. Wilson Wprowadzenie do teorii grafw, PWN, Warszawa 1998 [26] N. Wirth Algorytmy + struktury danych = programy, WNT, Warszawa 1999

Niniejsza publikacja stanowi wyczerpujce rdo informacji o zawodach VII Olimpiady Informatycznej, przeprowadzonych w roku szkolnym 1999/2000. Ksika zawiera zarwno informacje dotyczce organizacji, regulaminu oraz wynikw zawodw. Zawarto take opis rozwiza wszystkich zada konkursowych. Do ksizki doczona jest dyskietka zawierajca wzorcowe rozwizania i testy do wszystkich zada Olimpiady. Ksizka zawiera take informacje o XI Midzynarodowej Olimpiadzie Informatycznej i teksty zada tej Olimpiady. VII Olimpiada Informatyczna to pozycja polecana szczeglnie uczniom przygotowujcym si do udziau w zawodach nastpnych Olimpiad oraz nauczycielom informatyki, ktrzy znajd w niej interesujce i przystpnie sformuowane problemy algorytmiczne wraz z rozwizaniami.

Olimpiada Informatyczna jest organizowana przy wspudziale

ISBN 8390630168

You might also like