Sm. takzhe:
|
Zadachi mezhdunarodnoj olimpiady 1996 godaPervyj tur:
Vtoroj tur
Rassmotrim sledujuschuju igru mezhdu dvumja igrokami. Na igrovoj doske zapisana posledovatel'nost' polozhitel'nyh celyh chisel. Igroki hodjat po ocheredi. Hod zakljuchaetsja v tom, chto igrok vybiraet chislo, raspolozhennoe na levom ili na pravom konce posledovatel'nosti. Vybrannoe chislo stiraetsja s doski. Igra zakanchivaetsja, kogda na doske ne ostaetsja chisel. Pervyj igrok vyigryvaet, esli summa vybrannyh im chisel ne men'she, chem summa chisel, vybrannyh vtorym igrokom. Vtoroj igrok igraet nailuchshim obrazom. Pervyj igrok vsegda hodit pervym. Izvestno, chto esli v nachale igry na doske zapisano chetnoe kolichestvo chisel, to u pervogo igroka est' vyigryshnaja strategija. Trebuetsja napisat' programmu, kotoraja realizuet vyigryshnuju strategiju pervogo igroka. Otvety vtorogo igroka vydaet imejuschijsja v vashem rasporjazhenii modul' Play. V module realizovany 3 procedury: StartGame, MyMove, YourMove. V samom nachale vasha programma dolzhna inicializirovat' igru, vyzvav proceduru StartGame (bez parametrov). Kogda vasha programma delaet ocherednoj hod, ona vypolnjaet instrukciju MyMove ('L') ili MyMove ('R') v zavisimosti ot togo, kakoe chislo ona vybiraet: 'L' - levoe ili 'R' - pravoe. Chtoby poluchit' otvet vtorogo igroka, vasha programma dolzhna vypolnit' instrukciju YourMove (C), gde C - peremennaja simvol'nogo tipa. Procedura YourMove zapisyvaet otvet vtorogo igroka v zadannuju peremennuju C ('L', esli vybiraetsja levoe chislo; 'R', esli pravoe). Vhodnye dannye Pervaja stroka fajla ishodnyh dannyh s imenem INPUT.TXT soderzhit dlinu nachal'noj posledovatel'nosti N (N - chetnoe i 2< =N< =100). Dalee sledujut N strok, v kazhdoj iz kotoryh soderzhitsja odno chislo. Jeti chisla zadajut nachal'nye znachenija, zapisannye na doske v porjadke sleva napravo. Chisla na doske ne prevyshajut 200. Vyhodnye dannye
Kogda igra zakanchivaetsja, vasha programma dolzhna zapisat' rezul'tat igry v fajl s imenem OUTPUT.TXT. Fajl soderzhit dva chisla, zapisannye v odnoj stroke. Pervoe chislo zadaet summu chisel, vybrannyh pervym igrokom, vtoroe chislo - summu chisel, vybrannyh vtorym igrokom. Vasha programma dolzhna sygrat' igru s modulem Play, a vyvod dolzhen sootvetstvovat' sygrannoj igre. Primer vvoda i vyvoda Nizhe priveden primer vhodnogo fajla i primer sootvetstvujuschego emu vyhodnogo fajla.
Na fabrike funkcioniruet proizvodstvennaja linija. Obrabotka kazhdoj detali trebuet dvuh operacij: snachala vypolnjaetsja operacija "A", a zatem - operacija "V". Dlja vypolnenija kazhdoj iz operacij suschestvuet opredelennoe kolichestvo stankov. Na ris.1 priveden primer organizacii proizvodstvennoj linii, kotoraja rabotaet sledujuschim obrazom. Stanok, vypolnjajuschij operaciju "A", beret detal' iz vhodnogo kontejnera, ispolnjaet operaciju "A" i pomeschaet detal' v promezhutochnyj kontejner. Stanok, vypolnjajuschij operaciju "V", beret detal' iz promezhutochnogo kontejnera, ispolnjaet operaciiju "V" i pomeschaet detal' v vyhodnoj kontejner. Vse stanki rabotajut parallel'no i nezavisimo drug ot druga. Vmestimost' kazhdogo iz kontejnerov neogranichena. Stanki imejut razlichnye vremennye harakteristiki obrabotki detalej, kazhdyj stanok imeet svoe vremja obrabotki.
Napishite programmu, kotoraja opredeljaet minimal'nyj period vremeni, neobhodimyj dlja vypolnenija operacii "A" nad vsemi N detaljami pri uslovii, chto oni stanovjatsja dostupnymi v moment vremeni 0 (podzadacha A). Neobhodimo takzhe vychislit' minimal'nyj period vremeni, neobhodimyj dlja vypolnenija obeih operacij "A" i "V" nad vsemi N detaljami (podzadacha V).
Vhodnye dannye
Fajl INPUT.TXT sostoit iz pjati strok i soderzhit nabor celyh polozhitel'nyh chisel. V pervoj stroke soderzhitsja chislo N - kolichestvo detalej (1<=N<=1000). Vo vtoroj stroke nahoditsja chislo M1 - kolichestvo stankov, vypolnjajuschih operaciju "A" (1<=M1<=30). V tret'ej stroke soderzhatsja M1 celyh chisel, opredeljajuschih vremena obrabotki detali sootvetstvujuschimi stankami, vypolnjajuschimi operaciju "A". V chetvertoj i pjatoj strokah nahodjatsja sootvetstvenno chislo M2 - kolichestvo stankov, vypolnjajuschih operaciju "V" (1<=M2<=30), i M2 celyh chisel, opredeljajuschih vremena obrabotki detali sootvetstvujuschimi stankami. Vremja obrabotki detali na kazhdom stanke vkljuchaet vremja, neobhodimoe dlja peremeschenija detali iz kontejnera k stanku i so stanka v kontejner. Vremja obrabotki dlja kazhdogo stanka zadaetsja celym chislom ot 1 do 20. Vyhodnye dannye
Vasha programma dolzhna sformirovat' dve stroki v fajle OUTPUT.TXT. Pervaja stroka dolzhna soderzhat' odno polozhitel'noe celoe chislo: reshenie podzadachi A. Vtoraja stroka dolzhna soderzhat' reshenie podzadachi V. Primer vvoda i vyvoda Nizhe priveden primer vhodnogo fajla i primer sootvetstvujuschego emu vyhodnogo fajla.
Nekotorye shkoly svjazany komp'juternoj set'ju. Mezhdu shkolami zakljucheny soglashenija: kazhdaja shkola imeet spisok shkol-poluchatelej, kotorym ona rassylaet programmnoe obespechenie vsjakij raz, poluchiv novoe besplatnoe programmnoe obespechenie (izvne seti ili iz drugoj shkoly). Pri jetom, esli shkola V est' v spiske poluchatelej shkoly A, to shkola A mozhet i ne byt' v spiske poluchatelej shkoly V. Trebuetsja napisat' programmu, opredeljajuschuju minimal'noe kolichestvo shkol, kotorym nado peredat' po jekzempljaru novogo programmnogo obespechenija, chtoby rasprostranit' ego po vsem shkolam seti v sootvetstvii s soglashenijami (podzadacha A). Krome togo, nado obespechit' vozmozhnost' rassylki novogo programmnogo obespechenija iz ljuboj shkoly po vsem ostal'nym shkolam. Dlja jetogo mozhno rasshirjat' spiski poluchatelej nekotoryh shkol, dobavljaja v nih novye shkoly. Trebuetsja najti minimal'noe summarnoe kolichestvo rasshirenij spiskov, pri kotoryh programmnoe obespechenie iz ljuboj shkoly dostiglo by vseh ostal'nyh shkol (podzadacha V). Odno rasshirenie oznachaet dobavlenie odnoj novoj shkoly- poluchatelja v spisok poluchatelej odnoj iz shkol. Vhodnye dannye
Pervaja stroka fajla INPUT.TXT soderzhit celoe chislo N - kolichestvo shkol v seti (2<=N<=100). Shkoly numerujutsja pervymi N polozhitel'nymi celymi chislami. Kazhdaja iz sledujuschih N strok zadaet spisok poluchatelej. Stroka i+1 soderzhit nomera poluchatelej i-j shkoly. Kazhdyj takoj spisok zakanchivaetsja nulem. Pustoj spisok soderzhit tol'ko nol'. Vyhodnye dannye
Vasha programma dolzhna zapisat' dve stroki v fajl OUTPUT.TXT. Ego pervaja stroka dolzhna soderzhat' odno polozhitel'noe celoe chislo - reshenie podzadachi A. Vtoraja stroka dolzhna soderzhat' reshenie podzadachi V. Primer vvoda i vyvoda
Risunok 1 pokazyvaet vozmozhnyj vhodnoj fajl i sotvetstvujuschij emu vyhodnoj fajl. Ris 1:
Struktura nekotoryh biologicheskih ob''ektov predstavljaetsja posledovatel'nost'ju ih sostavljajuschih. Jeti sostavljajuschie oboznachajutsja zaglavnymi bukvami. Biologi interesujutsja razlozheniem dlinnoj posledovatel'nosti v bolee korotkie posledovatel'nosti. Jeti korotkie posledovatel'nosti nazyvajutsja primitivami. Govorjat, chto posledovatel'nost' S mozhet byt' obrazovana iz dannogo mnozhestva primitivov P, esli suschestvujut n primitivov p1,...,pn v P, takih, chto ih konkatenacija (sceplenie) p1...pn ravnjaetsja S. Pri konkatenacii primitivy p1,...,pn zapisyvajutsja posledovatel'no bez razdelitel'nyh probelov. Nekotorye primitivy mogut vstrechat'sja v konkatenacii bolee odnogo raza, i ne objazatel'no vse primitivy dolzhny byt' ispol'zovany.
Naprimer, posledovatel'nost' ABABACABAAB mozhet byt' obrazovana iz mnozhestva primitivov {A, AB, BA, CA, BBC}. Pervye K simvolov stroki S budem nazyvat' prefiksom stroki S dliny K.
Napishite programmu, kotoraja dlja zadannyh mnozhestva primitivov P i posledovatel'nosti T opredeljaet dlinu maksimal'nogo prefiksa posledovatel'nosti T, kotoryj mozhet byt' obrazovan iz mnozhestva primitivov P. Vhodnye dannye Ishodnye dannye raspolozheny v dvuh fajlah. Fajl INPUT.TXT opisyvaet mnozhestvo primitivov P, a fajl DATA.TXT soderzhit posledovatel'nost' T, trebujuschuju proverki. Pervaja stroka INPUT.TXT soderzhit chislo N - kolichestvo primitivov v mnozhestve P (1<=N<=100). Kazhdyj primitiv zadan v dvuh posledovatel'nyh strokah. Pervaja iz nih soderzhit dlinu L primitiva (1<=L<=20), a vtoraja - stroku iz zaglavnyh bukv (ot "A" do "Z") dliny L. Vse N primitivov razlichny. Kazhdaja stroka fajla DATA.TXT soderzhit odnu zaglavnuju bukvu v pervoj pozicii. Fajl DATA.TXT zakanchivaetsja strokoj s simvolom "." (tochka) v pervoj pozicii. Dlina posledovatel'nosti ne men'she 1 i ne bol'she 500 000. Vyhodnye dannye
Zapisat' v pervuju stroku fajla OUTPUT.TXT dlinu maksimal'nogo prefiksa posledovatel'nosti T, kotoryj mozhet byt' obrazovan iz mnozhestva P. Primer vhoda i vyhoda
Nizhe priveden primer vhodnyh dannyh i sotvetstvujuschij jetim vhodnym dannym vyhodnoj fajl.
Posle neverojatnogo uspeha golovomki "Kubik Rubika", gospodin Rubik pridumal ee ploskij variant - "Magicheskie kvadratiki". Golovolomka sostoit iz 8 svjazannyh mezhdu soboj odinakovyh kvadratikov (sm. ris.1). Jeti kvadratiki raskrasheny v 8 razlichnyh cvetov. Cveta opredeljajutsja celymi chislami ot 1 do 8, kak pokazano na ris.1. Konfiguracija golovolomki opredeljaetsja posledovatel'nost'ju cvetov kvadratikov, zadannyh po chasovoj strelke, nachinaja s levogo verhnego kvadrata i konchaja levym nizhnim. Naprimer, konfiguracija na ris.1 opredeljaetsja posledovatel'nost'ju (1, 2, 3, 4, 5, 6, 7, 8). Jeta konfiguracija vsegda javljaetsja nachal'noj. Suschestvujut tri bazovyh preobrazovanija golovolomki. Jeti preobrazovanija oboznachajutsja bukvami A, B i C:
A -- perestanovka verhnego i nizhnego rjadov; Izvestno, chto s ispol'zovaniem jetih preobrazovanij mozhno poluchit' ljubuju zadannuju konechnuju konfiguraciju. Realizacii bazovyh preobrazovanij dlja nachal'noj konfiguracii privedeny na ris.2. Chisla, raspolozhennye vne kvadratikov, opredeljajut pozicii kvadratikov. Esli kvadratik v pozicii p soderzhit chislo i, jeto oznachaet, chto v rezul'tate sootvetstvujuschego preobrazovanija kvadratik, kotoryj v nachal'noj konfiguracii nahodilsja v pozicii i peremeschaetsja v poziciju p.
Napishite programmu, kotoraja nahodit posledovatel'nost' dejstvij, preobrazujuschuju nachal'nuju konfiguraciju (sm. ris. 1) v zadannuju konechnuju konfiguraciju (podzadacha A). Dva dopolnitel'nyh balla za kazhdyj test budut prisuzhdat'sja v tom sluchae, esli dlina posledovatel'nosti preobrazovanij ne prevyshaet 300 (podzadacha B).
Vhodnye dannye Fajl ishodnyh dannyh INPUT.TXT soderzhit 8 polozhitel'nyh celyh chisel, nahodjaschihsja v pervoj stroke fajla. Jeti chisla zadajut konechnuju konfiguraciju golovolomki.
Vyhodnye dannye V pervoj stroke fajla OUTPUT.TXT dolzhno soderzhat'sja chislo L - dlina posledovatel'nosti preobrazovanij. Sledujuschie L strok dolzhny soderzhat' najdennuju posledovatel'nost' preobrazovanij. V kazhdoj stroke v pervoj pozicii dolzhna soderzhat'sja odna iz bukv "A", "B" ili "C", zadajuschaja sootvetstvujuschee preobrazovanie.
Dopolnitel'nye sredstva
V vashe rasporjazhenie predostavljaetja programma MTOOL.EXE (in task directory), kotoraja pozvoljaet smodelirovat' rabotu golovolomki. Programma MTOOL.EXE imeet sledujuschij format vyzova: "mtool input.txt output.txt", gde formaty fajlov input.txt i output.txt sootvetstvujut opisannym trebovanijam. S pomosch'ju jetoj programmy vy smozhete jeksperimentirovat' s konechnoj konfiguraciej i s posledovatel'nost'ju preobrazovanij.
Primer vvoda i vyvoda
Sortirovka javljaetsja odnoj iz naibolee chasto vstrechajuschihsja vychislitel'nyh zadach. Rassmotrim special'nuju zadachu sortirovki, gde sortiruemye zapisi mogut imet' ne bolee treh razlichnyh znachenij kljucha. Jeto byvaet, naprimer, togda, kogda my hotim uporjadochit' medalistov olimpiady po informatike v sootvetstvii s rangami medalej. V dannoj zadache v kachestve znachenij kljuchej ispol'zujutsja tri chisla 1, 2 i 3. Trebuetsja otsortirovat' posledovatel'nost' v porjadke neubyvanija. Sortirovka osuschestvljaetsja s pomosch'ju poparnyh perestanovok jelementov. Pri poparnoj perestanovke, opredeljaemoj nomerami pozicij p i q, proizvoditsja obmen mestami dvuh jelementov, nahodjaschihsja v pozicijah p i q. Napishite programmu, kotoraja po zadannoj posledovatel'nosti znachenij kljuchej nahodit minimal'noe kolichestvo operacij poparnoj perestanovki, neobhodimyh dlja togo, chtoby otsortirovat' zadannuju posledovatel'nost' (podzadacha A). Krome togo, postrojte posledovatel'nost' operacij poparnoj perestanovki, realizujuschuju sootve-tstvujuschuju sortirovku (podzadacha V). Vhodnye dannye
Pervaja stroka fajla INPUT.TXT soderzhit kolichestvo kljuchej N (1<=N<=1000). Kazhdaja iz posledujuschih N strok soderzhit znachenie kljucha. Vyhodnye dannye Pervaja stroka vyhodnogo fajla OUTPUT.TXT dolzhna soderzhat' minimal'noe kolichestvo operacij poparnoj perestanovki L, neobhodimoe dlja sortirovki zadannoj posledovatel'nosti (podzadacha A). Sledujuschie L strok dolzhny soderzhat' sootvetstvujuschuju posledovatel'nost' operacij poparnoj perestanovki v porjadke ih vypolnenija (podzadacha V). Kazhdaja stroka soderzhit odnu operaciju poparnoj perestanovki, zadannuju dvumja chislami p i q - pozicijami dvuh perestavljaemyh jelementov. Pozicija zadaetsja celym chislom ot 1 do N. Primer vvoda i vyvoda
Nizhe priveden primer vhodnogo fajla i sotvetstvujuschego emu vyhodnogo fajla.
|