Sankt-Peterburgskie Olimpiady po Informatike

Zadachi shkol'noj komandnoj olimpiady SPb 1995 goda

Zadacha A (Uravnenie) Zadacha B (Kubik)
Zadacha C (SOS) Zadacha D (Vyrazhenie)
Zadacha E (Buratino) Zadacha F (Nadezhnaja programma)

Reshenija zadach (na jazyke Paskal') i testy

Zadacha A (Uravnenie)

Imja fajla ishodnyh dannyh: INPUT.TXT
Imja vyhodnogo fajla: OUTPUT.TXT

Zadano uravnenenie vida A+B=C, gde A, B i C - neotricatel'nye celye chisla, v desjatichnoj zapisi kotoryh nekotorye cifry zameneny znakami voprosa "?". Naprimer, ?65+443=2?4. Trebuetsja podstavit' vmesto znakov voprosa cifry, tak chtoby ravenstvo stalo vernym, libo opredelit', chto jeto nevozmozhno. Najti tol'ko odno iz vozmozhnyh reshenij.

Ishodnye dannye

Fajl ishodnyh dannyh soderzhit odnu ili neskol'ko strok, v kazhdoj iz kotoryh zapisano odno uravnenie v vide A+B=C. Uravnenie sostoit ne bolee, chem iz 80 simvolov. Fajl ishodnyh dannyh ne soderzhit probelov i pustyh strok.

Vyhodnye dannye

Dlja kazhdogo uravnenija vyvesti v vyhodnoj fajl na otdel'noj stroke reshenie - vernoe ravenstvo, poluchennoe iz ishodnogo uravnenija zamenoj znakov voprosa ciframi, libo soobschenie "reshenija ne suschestvuet".

Primer fajla ishodnyh dannyh INPUT.TXT:

2+2=5
?+?=??
??2?4+9?=355

Vyhodnoj fajl OUTPUT.TXT dlja privedennogo primera:

reshenija ne suschestvuet
9+5=14
00264+91=355

Zadacha B (Kubik)

Imja fajla ishodnyh dannyh: INPUT.TXT
Imja vyhodnogo fajla: OUTPUT.TXT
ris.1

Na odnoj iz kletok shahmatnoj doski (sm.ris.1) stoit kubik. Na granjah kubika napisany neotricatel'nye celye chisla, ne prevoshodjaschie 1000. Kubik mozhno peremeschat' na smezhnuju kletku, perekatyvaja ego cherez sootvetstvujuschee rebro v osnovanii. Pri dvizhenii schitaetsja summa chisel, popavshih v osnovanie kubika (kazhdoe chislo schitaetsja stol'ko raz, skol'ko raz kubik okazyvalsja na dannom osnovanii). Trebuetsja najti takoj put' dvizhenija kubika ot nachal'noj do zadannoj konechnoj kletki, pri kotorom summa chisel budet minimal'noj. Chisla, stojaschie v osnovanii kubika v nachal'noj i konechnoj pozicijah tozhe vhodjat v summu. Nachal'naja i konechnaja pozicii razlichajutsja.

Ishodnye dannye

Pervoe stroka v fajle soderzhit kolichestvo naborov ishodnyh dannyh. Kazhdyj nabor zapisyvaetsja na otdel'noj stroke i zadaetsja sledujuschim obrazom. V nachale zapisyvajutsja koordinaty nachal'noj i konechnoj pozicij kubika. Koordinata sostoit iz propisnoj bukvy i sledujuschej za nej bez probela cifry (sm. primer i ris.1). Dalee sledujut 6 chisel, zapisannyh na granjah kubika. Pervym idet chislo, zapisannoe na perednej grani, dalee - na zadnej, verhnej, pravoj, nizhnej i levoj granjah sootvetstsvenno. Ishodnyj fajl ne soderzhit pustyh strok.

Vyhodnye dannye

Dlja kazhdogo nabora ishodnyh dannyh vyvesti v vyhodnoj fajl na otdel'noj stroke minimal'nuju summu i sam put'. Put' zadaetsja posledovatel'nym perechisleniem koordinat polej, po kotorym dvizhetsja kubik. Put' dolzhen nachinat'sja nachal'noj poziciej i zakanchivat'sja konechnoj poziciej kubika. Koordinaty zadajutsja takzhe, kak vo vhodnyh dannyh.

Primer fajla ishodnyh INPUT.TXT:

2
a1 b2 1 1 1 1 1 1
e2 e3 0 8 1 2 1 1

Vyhodnoj fajl OUTPUT.TXT dlja privedennogo primera:

3 a1 b1 b2
5 e2 d2 d1 e1 e2 e3

Zadacha C (SOS)

Imja fajla ishodnyh dannyh: INPUT.TXT
Imja vyhodnogo fajla: OUTPUT.TXT

V okeane, v tochke s koordinatami (x,y) poterpel krushenie korabl'. Nedaleko ot mesta krushenija nahoditsja ostrov, kotoryj imeet formu N-ugol'nika (mnogougol'nik ne objazatel'no vypuklyj; 3< N< 50). Spasshiesja posle korablekrushenija passazhiry okazalis' v shljupke, kotoraja mozhet dvigat'sja v ljubom napravlenii so skorost'ju, ne prevoshodjaschej v (v> 0; shljupka mozhet menjat' napravlenie i velichinu skorosti vo vremja dvizhenija; skorost' v zadana otnositel'no vody). V okenane imeetsja postojannoe techenie, vektor skorosti kotorogo (vtx, vty). Trebuetsja najti minimal'noe vremja, za kotoroe shljupka doberetsja do ostrova, libo opredelit', chto iz-za sil'nogo techenija shljupka do ostrova doplyt' ne smozhet.

Ishodnye dannye

Pervoe chislo v fajle zadaet kolichestvo naborov ishodnyh dannyh. Nabor soderzhit koordinaty mesta krushenija (x,y); kolichestvo vershin ostrova N; koordinaty vershin ostrova, zadannye v porjadke obhoda ostrova po chasovoj strelke: x1,y1,x2,y2, ... , xN,yN; maksimal'nuju skorost' spasatel'noj shljupki v; vektor skorosti techenija (vty, vtx). Vse chisla v ishodnom fajle razdeljajutsja probelami i (ili) simvolami perevoda stroki. Koordinaty i skorosti zadajutsja veschestvennymi chislami.

Vyhodnye dannye

Dlja kazhdogo nabora ishodnyh dannyh vyvesti v vyhodnoj fajl na otdel'noj stroke minimal'noe vremja, za kotoroe spasatel'naja shljupka mozhet dobrat'sja do ostrova, libo soobschenie "dobrat'sja nevozmozhno".

Primechanija

  1. Vse velichiny zadajutsja v odoj sisteme izmerenija.
  2. Minimal'noe vremja v otvete dolzhno byt' verno s tochnost'ju do 3-h znakov posle zapjatoj.
  3. Napomnim vam, chto vektor skorosti shljupki otnositel'no zemli nahoditsja kak summa vektora skorosti techenija (vtx, vty) i vektora skorosti shljupki otnositel'no vody (vx, vy). Poskol'ku shljupka mozhet dvigat'sja v ljubom napravlenii so skorost'ju, ne prevoshodjaschej v, to dlina vektora (vx,vy) ne dolzhna prevyshat' v, t.e. vx*vx< =v*v.

Primer fajla ishodnyh dannyh INPUT.TXT:

2
5.2 7.65 3 0 0 0 3 3 0 2.5 17.8 0
4 3 3 0 0 0 3 3 0 2 1 1

Vyhodnoj fajla OUTPUT.TXT dlja privedennogo primera:

dobrat'sja nevozmozhno
4.828427

Zadacha D (Vyrazhenie)

Imja fajla ishodnyh dannyh INPUT.TXT
Imja vyhodnogo fajla OUTPUT.TXT
ris.2

Zadano arifmeticheskoe vyrazhenie, soderzhaschee neotricatel'nye celye konstanty (neogranichennogo razmera), znaki arifmeticheskih operacij: "+", "-" (binarnyj), "/", "*" i kruglye skobki. Po opredelennym pravilam vyrazhenie graficheski izobrazhaetsja v vide dvoichnogo dereva. Operacii raspolagajutsja v vershinah dereva, a operandy obrazujut levoe i pravoe podderev'ja vershiny s dannoj operaciej. Na ris.2 priveden primer graficheskogo izobrazhenija vyrazhenija (57+14)*35.

Trebuetsja dlja dannogo vyrazhenija opredelit' razmery (vysotu i shirinu) ego graficheskogo izobrazhenija. Izvestno, chto esli A i B - operandy operacii r, a HA i WA - vysota i shirina graficheskogo predstavlenija vyrazhenija A, HB i WB - vysota i shirina graficheskogo predstavlenija vyrazhenija B, to vysotoj i shirinoj graficheskogo predstavlenija vyrazhenija ArB budut 2+max(HA,HB) i 3+WA+WB sootvetstvenno. Dlja konstanty vysota graficheskogo predstavlenija - 3, a shirina ravnjaetsja kolichestvu cifr v zapisi konstanty + 2. Naprimer, esli vyrazhenie A imeet vysotu i shirinu 1 i 3, vyrazhenie B imeet vysotu i shirinu 5 i 5, to vyrazhenie A*B budet imet' vysotu 7 i shirinu 11.

Vyhodnye dannye

Fajl ishodnyh dannyh soderzhit odno ili neskol'ko vyrazhenij. Kazhdoe vyrazhenie zapisyvaetsja na otdel'noj stroke. Maksimal'naja dlina vyrazhenija - 80 simvolov. Fajl ishodnyh dannyh ne soderzhit probelov i pustyh strok.

Vyhodnye dannye

Dlja kazhdogo vyrazhenija vyvesti v vyhodnoj fajl na otdel'noj stroke vysotu i shirinu graficheskogo predstavlenija.

Primer fajla ishodnyh dannyh INPUT.TXT:

((487652875872452))
31/12-1+79

Vyhodnoj fajl OUTPUT.TXT dlja privedennogo primera:

3 17
9 24

Primechanie

Derevo vyrazhenija sootvetstvuet porjadku primenenija operacij k operandam. Predpolagaetsja standartnyj prioritet operacij (umnozhenie i delenie vypolnjaetsja ran'she slozhenija i vychitanija). Operacii s odinakovym prioritetom (+ i -, * i /) vypolnjajutsja v porjadke sleva napravo. Naprimer, dlja vyrazhenija 1+2*3-4-5 porjadok vypolnenija operacij (pokazannyj dopolnitel'nymi skobkami) sledujuschij: ((1+(2*3))- 4)-5.

Zadacha E (Buratino)

Imja fajla ishodnyh dannyh INPUT.TXT
Imja vyhodnogo fajla OUTPUT.TXT

Zloj Karabas-Barabas posadil v dva temnyh podvala Buratino i Mal'vinu. On razreshaet im obmenivat'sja pis'mami, no chitaet ih, poskol'ku opasaetsja, chto oni dogovorjatsja o pobege. K neschast'ju dlja Karabasa, plenniki zaranee dogovorilis' o sposobe peredachi sekretnyh soobschenij. Dlja togo, chtoby zashifrovat' soobschenie iz nulej i edinic plenniki sostavljajut pis'mo na pravil'nom russkom jazyke, v kotorom nuljam iz sekretnogo soobschenija sootvetstvujut slova chetnoj dliny, a edinicam - nechetnoj. Znaki prepinanija (tochki, zapjatye, tire, i t.p.) pri deshifrovke ne uchityvajutsja. V zashifrovannom tekste zapreschaetsja:

1. povtorjat' predlozhenija;
2. dvazhdy ispol'zovat' slovo v odnom predlozhenii (ispol'zovat' odno slovo v raznyh predlozhenijah ne zapreschaetsja).

Napishite programmu, kotoraja vvodit sekretnoe soobschenie - posledovatel'nost' ne bolee, chem iz 100 nulej i edinic i vyvodit ego v zashifrovannom vide. Zashifrovannyj tekst dolzhen byt' sostavlen po pravilam russkogo jazyka (t.e. ne soderzhat' orfograficheskih, punktuacionnyh i sintaksicheskih oshibok).

Ishodnye dannye

Fajl soderzhit odnu ili neskol'ko sekretnyh posledovatel'nostej. Kazhdaja posledovatel'nost' sostoit ne bolee, chem iz 100 nulej i edinic i zapisyvaetsja na otdel'noj stroke. Fajl ishodnyh dannyh ne soderzhit probelov i pustyh strok.

Vyhodnye dannye

Dlja kazhdogo sekretnogo soobschenija vyvesti v vyhodnoj fajl ego zashifrovannyj variant. Soobschenija v vyhodnom fajle dolzhny razdeljat'sja pustoj strokoj. Soobschenie ne dolzhno soderzhat' pustyh strok. Kazhdoe zashifrovannoe soobschenie mozhet raspolagat'sja na neskol'kih strokah, perenosit' slova zapreschaetsja.

Primer fajla ishodnyh dannyh INPUT.TXT:

110001000001000110100101110
0

Vyhodnoj fajl OUTPUT.TXT dlja privedennogo primera:


Moroz i solnce; den' chudesnyj! Esche ty dremlesh', drug
prelestnyj - pora, krasavica, prosnis': otkroj somknuty
negoj vzory na vstrechu severnoj Avrory, zvezdoju severa
javis'! (A.S.Pushkin)

Vechereet.

Primechanie

Razlichnye nabory ishodnyh dannyh zadajut razlichnye sekretnye soobschenija, pojetomu odno predlozhenie mozhet vstrechat'sja v raznyh zashifrovannyh tekstah.

Zadacha F (Nadezhnaja programma)

Zadacha F, privedennaja nizhe, byla predlozhena uchastnikam na dopolnitel'nyj konkurs, za otdel'nyj priz zhjuri. Uchastniki mogli reshat' zadachu v techenii dvuh nedel' posle olimpiady. Odnako, nikto iz shkol'nikov zadachu F tak i ne reshil.

Odin krupnyj komp'juternyj koncern razrabotal novyj jazyk programmirovanija SIM i superkomp'juter, kotoryj interpretiruet programmy na jetom jazyke. Superkomp'juter mozhet vypolnjat' 100 trillionov operatorov jazyka SIM v sekundu, no vyjasnilos', chto ego processor delaet : oshibki! Ne chasche, chem 1 raz na 1000 komand on mozhet libo pereskochit' na druguju komandu, libo isportit' soderzhimoe odnoj jachejki pamjati. Razrabotchiki stali gorevat', chto ih izobretenie nikomu ne nuzhno, no uchenye podskazali, chto posle nebol'shoj modifikacii sistemy komand komp'juter vse zhe mozhno budet ispol'zovat'. Oni predlozhili vvesti neskol'ko novyh komand i novyj bezopasnyj rezhim raboty processora, v kotorom processor ne delaet oshibok, no rabotaet ochen' medlenno, so skorost'ju vsego 1000 operatorov v sekundu. Novye operatory pozvoljajut perekljuchat'sja v bezopasnyj rezhim i vyhodit' iz nego. Takzhe vveli registr PSW, edinichnoe znachenie kotorogo razreshaet vypolnenie nekotoryh "opasnyh operatorov". Posle takoj modifikacii sdelalos' vozmozhnym ljubuju programmu nebol'shogo razmera peredelat' v "nadezhnuju", t.e. ustojchivuju k oshibkam superkomp'jutera.

Vasha zadacha budet napisat' programmu, kotoraja preobrazuet zadannuju programmu na pervonachal'nom jazyke SIM (ne rasshirennom special'nymi komandami) v "nadezhnuju".

Vashej zadachej budet napisat' programmu, kotoraja preobrazovyvaet zadannuju programmu na pervonachal'nom jazyke SIM (ne rasshirennom special'nymi komandami) v "nadezhnuju".

Nizhe privoditsja spisok operatorov pervonachal'nogo jazyka SIM:

1. Operator prisvaivanija.

Format: < Name > =< Value> , < BR> gde Name - jeto imja peremennoj, Value - jeto libo imja peremennoj, libo celochislennaja konstanta.

Dejstvie: Operator ustanavlivaet znachenie peremennoj Name ravnoj znacheniju Value

Primer: Temperature = -1 2. Arifmeticheskij operator

Format: < Name> =< Value1> < Op> < Value2>
gde Value1 i Value2 - kak i v operatore prisvaivanija, a Op - odin iz znakov arifmeticheskih operacij +, -, *, / (delenie nacelo).

Dejstvie: Operator ustanavlivaet znachenie peremennoj Name ravnoj znacheniju vyrazhenija v pravoj chasti.

Primer: i = i + 1

3. Operatory vvoda-vyvoda

Format: READ < Name> i WRITE < Value>

Dejstvie: Operator READ chitaet iz vhodnogo potoka ocherednoe chislo i zapisyvaet ego v peremennuju Name. Operator WRITE vyvodit v vyhodnoj potok libo znachenie ukazannoj peremennoj, libo konstantu (parametr Value).

Primer: READ

4. Operator bezuslovnogo perehoda

Format: GOTO < Label> ,

gde Label Label - libo identifikator metki, libo celochislennaja konstanta Disp.

Dejstvie: proishodit bezuslovnyj perehod k operatoru s zadannoj metkoj, libo k komande, otstojaschej ot dannoj na Disp operatorov.

Primery:
GOTO -1 (perehod na pred. operator)
GOTO ABC

5. Operator uslovnogo perehoda

Format: IF < Value1> < Op> < Value2> GOTO < Label>
gde Op - znak operacii sravnenija: "< ", "> ", "=", "< > ", "< =",""> =", a Label - libo identifikator metki, libo celochislennaja konstanta Disp.

Dejstvie: Esli logicheskoe vyrazhenie istinno, proishodit perehod (sm. GOTO).

Primer: IF A=0 GOTO EndProgram

6. Operator ostanova

Format: HALT

Dejstvie: Proizvodit ostanov processora. Programma zakanchivaet rabotu.

Primer: HALT

7. Metki

Metka opisyvaetsja identifikatorom metki, posle kotorogo stavitsja simvol dvoetochie ":".

Primer metki: ThisIsLabelExample:

Primer programmy, kotoraja vvodit N v nahodit (ne samym optimal'nym sposobom) summu chisel ot 1 do N:

read N
i = 1
sum = 0
Loop: if i >  N goto EndProgram
   sum = sum + i
   i = i+1
goto Loop
EndProgram:
HALT
Kak uzhe bylo skazano vyshe, v svjazi s tem, chto Superkomp'juter delal oshibki v jazyk byli dobavleny:

8. Bezopasnyj rezhim raboty

V jetom rezhime processor rabotaet ochen' medlenno, no ne delaet oshibok. Teper' operatory READ, WRITE i HALT vypolnjajutsja tol'ko v bezopasnom rezhime! V obychnom rezhime vypolnenie jetih komand ne proizvodit nikakih dejstvij.

9. Operator SLOW

Format: SLOW

Dejstvie: Perevodit processor v bezopasnyj (medlennyj rezhim). Esli processor uzhe nahodilsja v bezopasnom rezhime, komanda ne proizvodit nikakih dejstvij. Komanda rabotaet tol'ko v tom sluchae, esli znachenie peremennoj PSW=1. Esli PSW< > 1 komanda ne proizvodit nikakih dejstvij. Peremennaja PSW javljaetsja obyknovennoj peremennoj i takzhe mozhet byt' oshibochno isporchena Superkomp'juterom.

10. Operator FAST

Format: FAST

Dejstvie: Vyvodit processor iz bezopasnogo rezhima. Esli processor rabotal v normal'nom rezhime, komanda ne proizvodit nikakih dejstvij.

Nachalo raboty programmy

V nachale raboty znachenija vseh peremennyh nulevye. Svoju rabotu superkomp'juter nachinaet v bezopasnom sostojanii!

Oshibki Superkomp'jutera

Superkomp'juter delaet ne bolee odnoj oshibki na 1000 komand v normal'nom rezhime. Jeto oznachaet, vypolniv v normal'nom rezhime 1000 komand (bez perekljuchenij v bezopasnyj rezhim) on oshibetsja ne bolee odnogo raza. Esli oshibka byla neposredstvenno pered vypolneniem komandy SLOW, to sledujuschaja oshibka mozhet vozniknut' prjamo srazu posle vypolnenija komandy FAST, nesmotrja na to, chto 1000 komand esche ne proshlo. Oshibka pojavljaetsja v promezhutke mezhdu vypolnenijami komand. Vo vremja oshibki processor libo portit znachenie kakoj-to peremennoj, libo sdvigaet ukazatel' tekuschej komandy v kakoe-to sluchajnoe mesto (no v predelah programmy).

Oshibok pri ispolnenii ne byvaet. Pri delenii na 0 poluchaetsja 0. Programma schitaetsja zaciklennoj, t.e. posle vypolnenija poslednej komandy v programme processor perehodit na pervuju.

Primechanie

Bezopasnyj rezhim byl vveden ne dlja togo, chtoby v nem postojanno rabotat', a tol'ko dlja togo, chtoby sdelat' vozmozhnym rabotu programmy na oshibajuschemsja komp'jutere!

Podskazka

Pol'zujtes' tem, chto do i posle oshibki Superkomp'juter vypolnit po krajnej mere 1000 komand bez sboev.

Primer nadezhnoj, no sovershenno bespoleznoj programmy, kotoraja vyvodit chislo 555 i zakanchivaet rabotu.

FAST
Begin:
PSW=1
SLOW
OUT=1
WRITE 555
IF PSW=0 GOTO Begin
IF OUT=0 GOTO Begin
HALT
GOTO Begin (mozhno ne pisat')

Zadanie

Napishite programmu, kotoraja perevodit tekst programmy na pervonachal'nom jazyke SIM (ne rasshirennom spec. komandami) v nadezhnuju. Ishodnaja programma soderzhit ne bolee 40 operatorov. Rezul'tirujuschaja nadezhnaja programma dolzhna soderzhat' ne bolee 4000 operatorov. Vo vremja raboty nadezhnaja programma dolzhna vypolnjat' ne bolee, chem 200 + 200 * (Kolichestvo vypolnennyh operatorov READ i WRITE) komand v medlennom (bezopasnom) rezhime.

Format vhodnoj programmy

1. Operatory zapisyvajutsja v otdel'nyh strokah.
2. Metka mozhet nahodit'sja libo v otdel'noj stroke, libo stojat' na odnoj stroke s operatorom.
3. Identifikator peremennoj i metki sostoit ne bolee, chem iz 20 simvolov.
4. Fajl mozhet soderzhat' pustye stroki i lishnie probely, odnako chisla, operatory i identifikatory razryvat'sja ne mogut.
5. Identifikatory ne mogut byt' nazvany imenami operatorov.
6. Metka i peremennaja ne mogut imet' odno imja.
7. Identifikator sostoit iz bol'shih i malen'kih latinskih bukv, cifr i simvolov: "_", "@", "#". Pervyj simvol identifikatora ne mozhet byt' cifroj.
8. Registr bukv i identifikatorah i kljuchevyh slovah znachenija ne imeet.

Format vyhodnoj programmy

Vse tozhe samoe, tol'ko imena peremennyh i metki mogut sostojat' iz 25 simvolov.

Interpretator

U Vas v rasporjazhenii est' interpretator superkomp'jutera. Opisanie raboty interpretatora nahoditsja na diskete vmeste s programmoj interpretatora. Interpretator sovershaet sluchajnye oshibki superkomp'jutera s zadannoj chastotoj. Vy mozhete ispol'zovat' interpretator dlja otladki svoej programmy, no vy dolzhny ponimat', pravil'naja rabota "nadezhnost'" programmy na sluchajnyh oshibkah ne garantiruet ee "nadezhnosti" v celom. Pri testirovanii budet ispol'zovat'sja "hitryj" interpretator superkomp'jutera, kotoryj pomimo sluchajnyh oshibok budet narochno pytat'sja "slomat'" vashu programmu.

Используются технологии uCoz