Dešimtoji moksleivių informatikos olimpiada

Pirmojo etapo uždavinių sąlygos

Jaunesniųjų grupė

 
 

144. LOGINIS KUBAS. Iš taško X reikia patekti į tašką Z. Keliai eina per kubo briaunas ir viršūnes. Per briauną galima eiti visada. Per viršūnę galima eiti tik tada, kai jos vardu pažymėto loginio kintamojo reikšmė yra true.

Užduotis. Parašykite loginį reiškinį, kurio reikšmė būtų true tada ir tik tada, kai iš taško X galima patekti į tašką Z.


145. FIGŪROS IŠ VIRVUTĖS. Ilgoje virvutėje kas 10 cm užmegzta po mazgelį (virvutės pradžioje užrištas mazgelis, o gale jo nėra). Lenkdami per mazgelius iš virvutės galime sudaryti tokias geometrines figūras: trikampius, kvadratus, stačiakampius.
Pavyzdžiui, kai virvelėje užmegzta 10 mazgelių, galime sudaryti tokias figūras:

Žinodami užrištų virvutėje mazgelių skaičių pabandykite sudaryti kuo daugiau skirtingų anksčiau minėtų geometrinių figūrų (sutampančių figūrų neturi būti). Vienodos formos figūros laikomos skirtingomis, jei jų kraštinių ilgiai yra skirtingi.

Užduotis. Parašykite algoritmą šiam uždaviniui išspręsti, kai pradinis duomuo – mazgelių skaičius, o rezultatai – sudarytų trikampių, kvadratų ir stačiakampių skaičiai atskirai. Skaičiuodami stačiakampių skaičių, kvadratų nelaikykite stačiakampiais.


146. ROBOTAS IR KUBELIAI. Kubeliai sudėti į tris greta esančias krūveles. Robotas vienu žingsniu (judesiu) gali paimti kubelį nuo bet kurios krūvelės ir pastatyti jį ant gretimos krūvelės viršaus. Kubelius reikia sukrauti taip, kad visose krūvelėse jų būtų po lygiai arba susidarytų tik vienas laiptelis. Pavyzdžiui,

Vienas laiptelis reiškia, kad norint nuo pirmos krūvelės patekti ant trečios teks lipti vieną kartą (tik žemyn arba tik aukštyn).

Užduotis. Sudarykite algoritmą, kuri rastų trumpiausią roboto žingsnių seką, kai žinomas kiekvienos krūvelės kubelių skaičius.
Roboto žingsnį sudaro du skaičiai – krūvelės, nuo kurios paimamas kubelis, ir krūvelės, ant kurios uždedamas kubelis, numeriai. Jei galimi keli variantai – spausdinti bet kurį. Jei nereikia perkelti nei vieno kubelio, spausdinkite pranešimą GERAI.


Pirmojo etapo uždavinių sąlygos

Vyresniųjų grupė

 147. LOGINIS KUBAS. Iš pradinės kubo viršūnės reikia pasiekti galinę. Keliai eina per kubo briaunas ir viršūnes. Per briauną galima eiti visada. Per viršūnę galima eiti tik tada, kai jos vardu pažymėto loginio kintamojo reikšmė yra true. Per pradinę ir galinę viršūnes visada galima eiti.


Užduotis. Parašykite algoritmą, kuris nustatytų ar iš pradinės viršūnės galima patekti į galinę.


Pradinius duomenis sudaro dviejų viršūnių vardai bei loginių kintamųjų a, b, c, d, e, f, g, h reikšmės. Loginio kintamojo reikšmė – tai loginė konstanta (true arba false), viršūnės vardas – mažoji lotyniška raidė (nuo a iki h). Pradiniai duomenys surašyti dešimtyje eilučių: pirmosiose dviejose – pradinės ir galinės viršūnių vardai, likusiose aštuoniose – kintamųjų reikšmės po vieną eilutėje.

148. MOKYTOJO DIENA.  Spalio mėnesio pirmąjį sekmadienį švenčiama Mokytojo diena.

Užduotis. Parašykite algoritmą, nustatantį kurią mėnesio dieną duotaisiais metais bus švenčiama Mokytojo diena. Žinoma, kad duotieji metai priklauso šiam šimtmečiui.


149. LAIPTAI IŠ KUBELIŲ. Iš kubelių galima sudėlioti įvairaus aukščio ir formos laiptus (iš kairės pusės laiptai statūs, kiekviena pakopa – kubelio pločio).

Užduotis. Parašykite algoritmą, kuris išspausdintų kokius laiptus galima sudėlioti iš n kubelių (n <= 14) bei rastų skirtingų formų laiptų skaičių.


Pavyzdžiui, kai n = 6, galima sudėlioti tokius laiptus.

Šio pavyzdžio rezultatas galėtų būti toks:
6
5 1
4 2
3 2 1
Laiptų skaičius: 4



Antrojo etapo uždavinių sąlygos

Jaunesniųjų grupė

150. ELEKTRONINIS INDIKATORIUS. Kai kuriuose namuose gyventojai padaro užraktą laiptinės durims. Svečiai, norintys paskambinti į butą, turi surinkti to buto numerį. Surinktas skaičius matomas elektroniniame indikatoriuje, esančiame prie laiptinės durų. Name yra ne daugiau kaip 99 butai, todėl indikatoriuje visuomet matomi du skaitmenys net jei svečias surenka tik vieną skaitmenį. Jei buto numeris vienaženklis, pirmasis skaitmuo automatiškai prilyginamas nuliui.

Elektroninis indikatorius  sudarytas iš šešių horizontalių ir aštuonių vertikalių elektroninių brūkšnelių.

Nuspaudus skaitmenį užsidega atitinkami brūkšneliai. Paveikslėlyje parodomas indikatoriaus skaitmenų vaizdavimas.
 

Kartą sugedo elektroninis indikatorius. Atėjus svečiui ir surinkus buto numerį, turėjo  numeris neužgeso, o pagaliukai, kurie turėjo užsidegti, kad matytųsi naujas numeris, pakeitė savo būsenas: tie kurie degė užgeso, kurie nedegė – ėmė šviesti.

Užduotis. Žinoma, kad sugedus indikatoriui name pabuvojo n svečių, taip pat žinoma, kuriame bute kiekvienas iš jų lankėsi. Visi svečiai ėjo po vieną. Prieš pirmojo svečio vizitą indikatorius rodė 00. Parašykite algoritmą, kuris rastų ir išspausdintų elektroninio indikatoriaus būseną po visų svečių apsilankymo. Kaip ekrane pavaizduoti indikatoriaus būseną, sugalvokite patys.


151. DIDMENINIS PIRKIMAS. Žinoma, kad perkant daugiau prekių jų vienetas kainuoja pigiau. Pundelyje yra 12 porų kojinių, dėžėje – 12 pundelių. Pavyzdžiui, kojinių dėžė kainuoja 247 litus, pundelis – 21 lt, pora – 2 lt. Įdomu tai, kad jei mums reikėtų 11 porų kojinių, tai geriau pirkti pundelį ir vienerias kojines kam nors atiduoti.

Užduotis. Pirkėjas nori įsigyti n porų kojinių. Sudarykite algoritmą, vadovaudamiesi kuriuo pigiausiai nupirktume kojines. Jei už tą pačią kainą galima nupirkti didesnį ir mažesnį kiekį kojinių, tai perkamas didesnis kiekis. Raskite perkamų dėžių, pundelių ir porų skaičių.


Pradinius duomenis sudaro keturi skaičiai: kojinių porų skaičius n, vienos dėžės, vieno pundelio bei vienos poros kaina litais.

152. SLAPTA KALBA. Julija ir Rita dažnai mokykloje dalijasi paslaptimis. Norėdamos, kad niekas jų nesuprastų, sugalvojo slaptą kalbą. Kiekvienas žodis padalijamas į dvi dalis ir tos dalys sukeičiamos vietomis. Žodžiai, sudaryti tik iš vienos raidės, paliekami tokie patys. Pavyzdžiui, sakinys:

Aš pirkau naujus džinsus.
galėtų skambėti taip:
Ša kaupir jusnau susdžin.
arba šitaip:
Ša aupirk ujusna sdžinsu.
Užduotis. Duotas lietuvių kalba užrašytas sakinys bei tas pats sakinys išverstas į slaptą kalbą. Parašykite algoritmą, patikrinantį, ar vertimas yra teisingas. Lygindami žodžius nekreipkite dėmesio į didžiąsias ir mažąsias raides. Jei vertime padaryta klaida, reikia rasti pirmąjį klaidingai išverstą žodį (originalą) ir toliau vertimo nebetikrinti.

Sakinio ilgis neviršija 255 simbolių, jis sudarytas tik iš raidžių bei tarpų ir užbaigiamas tašku. Tarp žodžių palikta po vieną tarpą.


Pavyzdys
Pradiniai duomenys
Rezultatas
Paaiškinimas
Naujus džinsus pirko Asta.
Ujusna susdžin kopir Asat.
Asta Žodis Asta buvo išverstas neteisingai: sukeistos ne žodžių dalys, o tik paskutinės dvi raidės.


 

Antrojo etapo uždavinių sąlygos

Vyresniųjų grupė

153. PAVEIKSLIUKAS IŠ ŽVAIGŽDUČIŲ. Paveiksliukas gaunamas šitaip: kvadratas padalijamas į mažus kvadratėlius, kurie sunumeruojami paveikslėlyje nurodyta tvarka. Pirminiai skaičiai pakeičiami žvaigždutėmis, sudėtiniai (ir vienetas) – taškais.

Užduotis. Parašykite algoritmą paveiksliukui spausdinti, kai duotas kvadrato kraštinės ilgis n (n <= 20).


154. TRYS SODININKAI. Trys draugai apsigyvenę kaime nusprendė mokytis sodininkauti. Kaime buvo didžiulis sodas, jame augo po vieną vaismedį kiekviename kvadratiniame ploto vienete.

Kiekvienas iš trijų draugų pasirinko stačiakampį sklypą ir nusprendė prižiūrėti jame esančius medžius. Susirinkus draugėn paaiškėjo, kad jų pasirinkti sklypai persidengia, t. y. kai kuriuos vaismedžius prižiūrės ne vienas, o keletas sodininkų.

Užduotis. Parašykite algoritmą, kuris suskaičiuotų, kiek vaismedžių panorėjo prižiūrėti visi trys draugai.


Pradiniai duomenys pateikiami trijose tekstinės bylos SODAS.DAT eilutėse. Į kiekvieną eilutę įrašyta po keturis skaičius, apibūdinančius kiekvieno draugo pasirinktą sklypą: sklypo apatinio kairiojo ir viršutinio dešiniojo kampų koordinatės (pirma koordinatė x, po to – y.). Visos koordinatės sveikieji skaičiai.

155. TEKSTO TVARKYMAS. Duotas tekstas, sudarytas iš žodžių, kai kurių skyrybos ženklų (taško, kablelio, dvitaškio bei kabliataškio), skliaustų „(“, „)“ bei tarpų.

Užduotis. Šį tekstą reikia išspausdinti stulpeliu, kurio vienoje eilutėje telpa n simbolių. Prieš atidarantįjį (kairįjį) skliaustą, taip pat po visų skyrybos ženklų turi būti paliekamas tarpas. Jei po uždarančiojo (dešiniojo) skliausto yra skyrybos ženklas, tarp skliausto ir ženklo tarpas nepaliekamas, kitais atvejais po šio skliausto paliekamas tarpas.

Keliant į naują eilutę, skyrybos ženklai bei uždarantysis skliaustas negali būti atskirti nuo prieš juos esančio žodžio, o atidarantysis skliaustas – nuo po jo einančio žodžio. Tekstas turi būti išlygiuotas pagal abu kraštus: pirmasis ir n-asis eilutės simboliai negali būti tarpai. Išimtis – paskutinė eilutė, kuri gali turėti mažiau nei n simbolių. Tarpai tarp žodžių turi būti kiek galima vienodesnio ilgio.


Pradiniai duomenys pateikti tekstinėje byloje. Pirmoje eilutėje įrašytas skaičius n, likusiose – pats tekstas. Viso teksto ilgis neviršija 160 simbolių. Pradiniai duomenys korektiški, t. y. sutvarkius tekstą kiekvienoje eilutėje (išskyrus paskutinę) tilps bent du žodžiai su reikiamais skyrybos ženklais.


Pavyzdys
Pradiniai duomenys
28
Abrikosų¤vaismedžiai¤užauga¤didesni¤už¤giminingas
slyvas.Pakankamai¤gerai¤ištveria¤šalčius,pražysta¤gegužės
pradžioje(¤¤ar¤viduryje¤¤)¤.

Rezultatas
Abrikosų¤¤vaismedžiai¤užauga
didesni¤¤¤¤¤už¤¤¤¤giminingas
slyvas.¤¤¤Pakankamai¤¤¤gerai
ištveria¤¤šalčius,¤¤pražysta
gegužės¤¤¤¤pradžioje¤¤¤¤¤(ar
viduryje).

Pastaba. Kad pavyzdys būtų suprantamesnis, tarpai jame vaizduojami simboliu „¤“.


Trečiojo etapo uždavinių sąlygos

I dalis

Jaunesniųjų grupė

 
 

156. AR DAUG KALBATE TELEFONU? Klientams pageidaujant „Telekomas“ gali nusiųsti kompiuterinę bylą su mėnesio pokalbių duomenimis. Byloje yra tokie duomenys apie kiekvieną pokalbį:

pokalbio diena ir pradžios laikas;
numeris, su kuriuo sujungta;
pokalbio trukmė minutėmis;
pokalbio kaina.
Duomenys pateikiami chronologine tvarka.

Sudarykite programą, kuri surinktų tokią telefono abonentui rūpimą informaciją:



Pradiniai duomenys įrašyti byloje TELE.DAT. Pirmoje eilutėje įrašytas pokalbių skaičius n (1 <= n <= 100). Likusiose n eilučių įrašyti duomenys apie kiekvieną pokalbį.

Kiekvienos eilutės ilgis - 43 simboliai, o struktūra tokia:

DD_:_VV.NN_:_***************_:_PPP_:_LLL.CC
_ – tarpo simbolis;
DD – mėnesio diena;
VV.NN – pokalbio pradžios laikas (valanda ir minutė);
*************** – sujungimo numeris. Jam skirta 15 pozicijų. Nevietiniai pokalbiai pradedami kodu 8. Lygiuojamos dešinės telefonų numerių pusės. Likusios tuščios pozicijos iš kairės užpildomos žvaigždutėmis.
PPP – pokalbio trukmė minutėmis;
LLL.CC – pokalbio kaina (litais ir centais).

Pradiniai duomenys korektiški - visi pokalbiai vyko tik tą patį mėnesį.



Rezultatus spausdinkite ekrane trimis eilutėmis. Pirmoje eilutėje pateikite penkis (ar mažiau) telefonų numerius, su kuriais prakalbėta daugiausia pinigų. Tarp numerių palikite po vieną tarpą.

Antroje eilutėje spausdinkite tris (ar mažiau) paras (mėnesio dienų numerius), kurių metu daugiausiai kalbėta. Tarp dienų palikite po vieną tarpą.

Trečioje eilutėje spausdinkite išlaidų dalį, kurią sudaro vietiniai pokalbiai bei išlaidų dalį, kurią sudaro vienos minutės trukmės pokalbiai. Šie du skaičiai spausdinami pateikiant du skaitmenis po kablelio. Tarp skaičių paliekama po vieną tarpą.



Pavyzdys

Pradiniai duomenys

7
01 : 12.00 : *********259601 : 120 : 008.40
10 : 19.20 : ******890025690 : 019 : 174.06
15 : 23.58 : *****8720529405 : 011 : 028.70
16 : 00.14 : *************02 : 010 : 000.00
17 : 01.28 : *********421558 : 015 : 001.07
18 : 15.36 : *********329405 : 310 : 021.05
25 : 08.35 : *******82153360 : 001 : 002.20
 

Rezultatai

890025690 8720529405 329405 259601 82153360
1 16 18
12.96 0.93

Paaiškinimai

Mokėti reikia atitinkamai po 174,06; 8,70; 21,05; 8,40 ir 2,20 Lt. 18 dieną kalbėta 310 min., 1 dieną - 120 min., 10 ir  16 dienomis  – po 19 min. Atsakyme galima pateikti bet kurias tris paras iš šiųketurių


157. ŽAIDIMAS SU ŠAŠKE. Žaidimą su šaške žaidžia vienas žmogus. Lentoje vienas šalia kito nupiešta n kvadratėlių. Jie sunumeruoti nuo 1 iki n. Į kiekvieną kvadratėlį įrašytas sveikasis skaičius nuo -n iki n. Pirmame kvadratėlyje įrašytas nulis. Jame žaidimo pradžioje pastatoma šaškė.

Žaidimas pradedamas metant lošimo kauliuką, turintį nuo 1 iki 6 akių. Žaidėjas pastumia šaškę per tiek kvadratėlių į priekį, kiek iškrito kauliuko akių. Jei šaškė sustoja ant kvadratėlio su teigiamu skaičiumi – ji per tiek kvadratėlių pastumiama į priekį, jei ant neigiamo – per tiek kvadratėlių perstumiama atgal. Taip vaikštoma tol, kol patenkama ant kvadratėlio su nuliu. Tada vėl metamas kauliukas ir judama į priekį.

Jei iš paskutiniojo kvadratėlio šaškei dar reikia judėti į priekį, ji patenka į pirmąjį kvadratėlį. Jei judėdama atgal šaškė patenka į pirmąjį langelį, tai iš ten niekur toliau nebeina – sustoja ir vėl metamas kauliukas.

Sutarta, kad perstumiant šaškę iš vieno kvadratėlio į kitą, ji aplanko ne tik tuos du, bet ir visus jos kelyje pasitaikančius kvadratėlius. Šaškės perstūmimas nuo vieno kvadratėlio ant kito gretimo laikomas žingsniu. Vadinasi, vienu ėjimu šaškė gali padaryti kelis žingsnius.

Žaidimas baigiamas, kai aplankomi visi kvadratėliai.

Panagrinėkime pavyzdį. Piešinyje parodyta, kaip judės šaškė, jei mėtant kauliuką iškrito 1, 2, 1. Kiekvienas žingsnis pavaizduotas rodykle. Iki žaidimo pabaigos šaškė padarė 15 žingsnių.

Parašykite algoritmą, randantį tokią kauliuko akių seką, kuriai iškritus žaidimas baigtųsi per mažiausią žingsnių skaičių.



Pradiniai duomenys įrašyti byloje KVADR.DAT. Pirmoje eilutėje nurodytas kvadratėlių skaičius n (1<= n <= 10000). Likusiose n eilučių įrašyta po vieną natūralųjį skaičių, nuo -n iki n. Tai kvadratėlių viduje esantys skaičiai.


Rezultatus – kauliuko akių seką – spausdinkite į bylą KVADR.REZ po vieną skaičių eilutėje.

Pavyzdys
Pradiniai duomenys
Rezultatai
Paaiškinimas
7
0
-3
2
6
0
-2
1
4
2
šaškė iš viso padarys šešis žingsnius


 

Trečiojo etapo uždavinių sąlygos

I dalis

Vyresniųjų grupė

 
 

158. SKAIČIAI. Sudarykite programą, kuri natūraliojo skaičiaus įprastą užrašą (vardininko linksniu) pakeistų jo skaitine reikšme. Pavyzdžiui, užrašas

tūkstantis devyni šimtai devyniasdešimt devyni
būtų pakeistas į
1999
Skaičiai vadinami taisyklinga lietuvių kalba, kiekiniais skaitvardžiais.

Žodis „vienas“ prieš tūkstančius ir šimtus gali būti praleistas, pavyzdžiui, skaičiaus 125 užrašas gali būti

vienas šimtas dvidešimt penki
arba
šimtas dvidešimt penki

Pradiniai duomenys įrašyti byloje SKAI.DAT. Pirmoje eilutėje nurodytas keičiamų skaičių kiekis n (1 <= n <= 400). Toliau eina n eilučių.

Kiekvienoje jų – vieno skaičiaus užrašas žodžiais. Žodžiai skaičiaus užraše skiriami bent vienu tarpu. Vartojamos tik mažosios raidės. Eilutės ilgis neviršija 255 simbolių. Keičiamų skaičių intervalas – nuo 1 iki 999999.



Rezultatai spausdinami į bylą SKAI.REZ po vieną skaičių eilutėje. Skaičiai turi būti išdėstyti tokia pat tvarka, kokia jie buvo pateikti pradinių duomenų byloje.

Jei kurio nors skaičiaus užrašas netaisyklingas, tai rezultatas laikomas lygus nuliui.


Pavyzdys
Pradiniai duomenys
Rezultatas
Paaiškinimai
   
šimtas dvidešimt du tūkstančiai trys 122003  
penkiolika 15   
vienas tūkstantis šimtas vienas 1101  
šimtas du šimtai 0 tokio skaičiaus nėra 
trys šimtas dvidešimt vienas 0 neteisingas linksnis 
trejetas šimtų netaisyklingas užrašas 

159. ŽAIDIMAS „MINŲ LAUKAS“. Turbūt daugeliui teko žaisti žaidimą „Minų laukas“ (Minesweeper). Trumpai apibūdinsime žaidimą: stačiakampėje lentoje, padalintoje į nm langelių, išdėstyta k minų (pavyzdyje n = m = 6, k = 8).
 

1
Pradžioje visi langeliai užverti ir žaidėjo tikslas yra per trumpiausią laiką atverti visus langelius, kuriuose nėra minų, o laukelius su minomis pažymėti. Jei žaidėjas atveria langelį su mina – žaidimas pralaimėtas. Atvėrus langelį, kuriame minos nėra, kompiuteris pateikia skaičių, rodantį, kiek kaimyniniuose langeliuose yra minų. Kaimyninių langelių yra 8, vadinasi, gali pasirodyti skaičius nuo 0 iki 8.

Užduotis. Duotas kvadratinis nn žaidimo laukas, kurio dalis langelių yra atverta. Juose minų nėra. Parašykite programą, kuri visus užvertus langelius suskirstytų į tris grupes: 1) langelius, kuriuose tikrai yra mina, 2) kuriuose minos tikrai nėra ir 3) kuriuose minos buvimas neaiškus: gali būti, bet gali ir nebūti.

Pastaba. Jei atvertame langelyje įrašytas nulis, tai atverti ir visi jo kaimyniniai langeliai.



Pradiniai duomenys pateikiami byloje MINOS.DAT. Pirmoje bylose eilutėje įrašytas skaičius n (2<=n<=75).

Likusiose n eilučių pateikiama informacija apie žaidimo lauką. Kiekvienoje eilutėje yra po n simbolių. Raidė U žymi užvertą laukelį, o skaitmenys 0, 1, … 8 rodo, kiek minų yra kaimyniniuose langeliuose.

Pradiniai duomenys korektiški: sprendinys visada egzistuoja.



Rezultatai rašomi į bylą MINOS.REZ. Joje turi būti įrašytas žaidimo laukas – n eilučių po n simbolių kiekvienoje. Simboliu M žymėkite langelius, kuriuose yra minos, simboliu L – langelius, kuriuose minų nėra ir simboliu N – langelius, kuriuose nežinoma, kas yra. Skaitmenys paliekami, kaip buvo duota pradinių duomenų byloje.

Pradinių duomenų ir rezultatų bylose tarpų tarp simbolių nėra.


Pavyzdys
Pradiniai duomenys Rezultatas
22L 
22U  MM1 
UU1  NLL 
UUU   

Trečiojo etapo uždavinių sąlygos

II dalis

Jaunesniųjų grupė


160. ŠOKOLADO VALGYMAS.  Turime didžiulį stačiakampį šokolado gabalą, sudarytą iš n x m plytelių – kvadratėlių. Viršuje kampinė kairioji plytelė nevalgoma – joje įmaišyta kažkas neskanaus. Tai plytelė-apgavikė.

Šokoladą valgo paeiliui dviese pagal tokią taisyklę: galima laužti bet kokio dydžio stačiakampį gabalą, kurio laužimo linija būtų tiesė. Tam, kam tenka „apgavikė“ – pralaimi. Valgančiųjų tikslas: laimėti arba, jei neįmanoma, bent prisivalgyti kuo daugiau šokolado.

Pavyzdžiui, šokoladas yra 3x4 plytelių dydžio:

Atsilaužus pirmajam valgytojui, lieka 3x2 plytelių dydžio šokoladas:

Atsilaužus antrajam lieka 3x1 plytelių:

Atsilaužus pirmajam lieka viena (nevalgoma) plytelė:

Aišku, kad antrasis pralaimi, nes jam teko nevalgoma plytelė. Be to, pirmasis suvalgė 8 plyteles, antrasis – 3.

Sudarykite algoritmą pirmajam valgytojui, kad jis laimėtų arba, jei neįmanoma laimėti – suvalgytų kuo daugiau šokolado. Laikykite, kad antrasis valgytojas šokoladą laužo optimaliai.


Pradiniai duomenys – sveikieji skaičiai n ir m – įvedami iš ekrano. n rodo eilučių, m – stulpelių skaičių.

Rezultatus spausdinkite ekrane vienoje eilutėje. Pirma spausdinama raidė L (jei pirmasis žaidėjas gali laimėti) arba P (jei pirmasis pralaimi). Tuomet spausdinama raidė H (jei laužimo linija horizontali) arba raidė V (jei laužimo linija vertikali). Po to spausdinamas atlaužiamų eilučių (ar stulpelių) skaičius.
Tarp dviejų raidžių bei raidės ir skaičiaus paliekamas vienas tarpas.

Pavyzdys
Pradiniai duomenys
Rezultatai
Paaiškinimas
1 3 L V 2 Pirmasis laimi

161. BURATINAS, LAPĖ ALISA IR KATINAS BAZILIJUS KVAILIŲ LAUKE. Plėšikai lapė Alisa ir katinas Bazilijus. stengiasi pagauti Buratiną, kuris norėdamas surasti Auksinį raktelį turi pereiti Kvailių lauką.

Kvailių laukas yra kvadrato formos, padalintas į nxn langelių. Lauko eilutės numeruojamos iš apačios į viršų, stulpeliai – iš kairės į dešinę. Langelis apibūdinamas dviem skaičiais:  pirma nurodoma eilutė, po to – stulpelis.

Plėšikai lapė Alisa ir katinas Bazilijus įsitaisę už lauko ribų kairėje arba dešinėje pusėje (arba ir vienoje, ir kitoje). Bijodami išsiduoti jie kiūto vienoje vietoje ir niekur nejuda. Plėšikai mato tik po vieną horizontalę (tą, šalia kurios jie pasislėpę). Buratinui pavyko sužinoti, kur jie slepiasi.

Buratinas gali judėti langeliais vertikaliai ir horizontaliai visomis keturiomis kryptimis. Vienas žingsnis – tai perėjimas iš vieno langelio į jam gretimą. Buratinas, norėdamas, kad jo nepastebėtų plėšikai, gali slėptis už šiukšlių konteinerių.

Kvailių lauke yra du šiukšlių konteineriai, kuriuos galima stumdyti (žinoma, jei prieš konteinerį nieko nėra). Jei toje horizontalėje, kurioje slepiasi plėšikas, tarp jo ir Buratino yra šiukšlių konteineris, tai plėšikas Buratino nemato.
 
Pavyzdys
L – lapė Alisa 
K – katinas Bazilijus 
B – Buratinas 
# – šiukšlių konteineriai 
$ – Auksinis raktelis 
Parašykite algoritmą, kuris rastų tokią Buratino žingsnių seką, kad jis nepastebėtas pasiektų Auksinį raktelį.


Pradiniai duomenys pateikti byloje BURAT.DAT. Pirmoje eilutėje nurodytas lauko dydis n (4 <= n <= 16). Antroje eilutėje įrašytos Buratino (jis visada stovi pirmoje horizontalėje), trečioje – Auksinio raktelio (jis visada paslėptas paskutinėje horizontalėje) koordinatės. Ketvirtoje ir penktoje eilutėse įrašytos šiukšlių konteinerių koordinatės. Šeštoje ir septintoje eilutėse nurodyta, ties kuria horizontale pasislėpė plėšikai. Pirma nurodomas horizontalės numeris, po to įrašytas nulis (0), jei plėšikas pasislėpęs kairėje lauko pusėje, arba skaičius (n+1), jei pasislėpęs dešinėje pusėje. Plėšikai negali stovėti nei pirmoje, nei paskutinėje horizontalėje.

Pradiniai duomenys tokie, kad uždavinys turi sprendinį.


Rezultatus rašykite į bylą BURAT.REZ. Į pirmąją bylos eilutę įrašykite Buratino žingsnių skaičių. Antroje eilutėje išvardinkite Buratino judėjimo kryptis. Jos žymimos didžiosiomis raidėmis: D (į dešinę), V (į viršų), K (į kairę), A (į apačią) ir vardinamos eilės tvarka.

Pavyzdys
Pradiniai duomenys
Rezultatai
Paaiškinimai
5
1 4
5 3 
2 4 
2 5 
2 0 
4 6 
7
DVVKKVV
Antras konteineris perstumiamas taip, 
kad užstotų katiną ir tada pasiekiamas raktelis.

 

162. SKAIČIAI. Olimpiados dalyviams buvo duotas toks uždavinys.
 
Sudarykite programą, kuri natūraliojo skaičiaus įprastą užrašą (kiekinį skaitvardį vardininko linksniu) pakeistų jo skaitine reikšme. Pavyzdžiui, užrašas 
tūkstantis devyni šimtai devyniasdešimt devyni 
būtų pakeistas į 
1999
Skaičiai vadinami taisyklinga lietuvių kalba, kiekiniais skaitvardžiais. Žodis „vienas“ prieš tūkstančius ir šimtus gali būti praleistas, pavyzdžiui, skaičiaus 125 užrašas gali būti 
vienas šimtas dvidešimt penki 
arba 
šimtas dvidešimt penki.
Pradiniai duomenys įrašyti byloje SKAI.DAT. Pirmoje eilutėje nurodytas keičiamų skaičių kiekis n (1 <= n <= 400). Toliau eina n eilučių. Kiekvienoje jų – vieno skaičiaus užrašas žodžiais. Žodžiai skaičiaus užraše skiriami bent vienu tarpu. Vartojamos tik mažosios raidės. Eilutės ilgis neviršija 255 simbolių. Keičiamų skaičių intervalas nuo 1 iki 999999
Rezultatai spausdinami į bylą SKAI.REZ po vieną skaičių eilutėje. Skaičiai turi būti išdėstyti tokia pat tvarka, kokia jie buvo pateikti pradinių duomenų byloje. Jei kurio nors skaičiaus užrašas netaisyklingas, tai rezultatas laikomas lygus nuliui.
Šį uždavinį sprendžia programa SKAIC.EXE (ją kartu su pradinių duomenų bei rezultatų bylos pavyzdžiais rasite archyve  10ol_162.zip; pavartota kodavimo lentelė 770). Kai kuriais atvejais ši programa pateikia klaidingus rezultatus. Suraskite klaidas.

Rastąsias klaidas aprašykite byloje, kurios prievardis turi būti .TXT.

Taip pat sudarykite kontrolinių duomenų rinkinį (testą), kuris aprėptų visas Jūsų rastas klaidas. Jį įrašykite į bylą SKAIC.DAT. tokiu pat formatu, kaip nurodyta uždavinio sąlygoje.


163. GELEŽINKELIO GROTELĖS. Yra žinomas toks šifravimo algoritmas, vadinamas „Geležinkelio grotelių“ metodu. Pavyzdžiui, turime sakinį „AŠ PASKAMBINSIU“ ir skaičių k = 6. Skaičių k vadinsime aukščiu. Sakinį užrašykime tokiu būdu:


Tarpo simbolis čia pažymėtas kaip pabraukimo simbolis.

 Dabar užrašykime pirmą eilutę, šalia antrą ir t.t. Gauname tokį užšifruotą tekstą: „AIŠBN MSPAIAKUS“.

Duotas užšifruotas tekstas bei to paties teksto neužšifruotas fragmentas. Parašykite algoritmą, kuris rastų tokį mažiausią aukštį k, kuris galėjo būti naudojamas užkodavimui. 



Pradiniai duomenys įrašyti byloje GROTEL.DAT. Pirmoje eilutėje įrašytas tekstą sudarančių simbolių skaičius n (1 <= n <= 16000).

Antroje eilutėje įrašytas neužšifruoto teksto fragmentas. Jo ilgis neviršija 255 simbolių.

Likusiose eilutėse įrašytas užšifruotas tekstas. Jei n mažesnis nei 100, tai tekstas pateikiamas vienoje eilutėje, priešingu atveju tekstas pateikiamas eilutėmis po 100 simbolių. Jei n nesidalija iš 100 be liekanos, paskutinėje eilutėje pateikti likę simboliai, kurie netilpo į ankstesnes eilutes.

Tekstas gali būti sudarytas iš didžiųjų bei mažųjų raidžių, įvairių kitų nevaldančių simbolių bei tabuliacijos simbolio. Didžiosios ir mažosios raidės tekste laikomos skirtingomis. Kiekvienas simbolis tekste pasikartoja ne daugiau 6000 kartų.

Duomenų pavyzdžius rasite bylose GROTEL1.DAT ir GROTEL2.DAT. Neužšifruoti tekstai, atitinkantys šiuos duomenis, įrašyti bylose GROTEL1.TXT ir GROTEL2.TXT. Bylas rasite archyve 10ol_163.zip


Rezultatą – skaičių k – spausdinkite ekrane.

Pavyzdys
Pradiniai duomenys
Rezultatas
15
SKAMB
AIŠBN MSPAIAKUS
6

164. DVIPARTINĖ  SISTEMA Stačiakampio formos valstybė padalinta į n x m kvadratėlių formos rajonų. Valstybės gyventojai yra pasidalinę į dvi tarpusavyje nesutariančias partijas: baltųjų ir juodųjų. Partijų nariai pasiskirstę po visus rajonus. Nesutarimams augant gyventojai nutarė pasidalinti rajonus ir įkurti dvi valstybes: baltųjų ir juodųjų.

Rajono priklausomybę vienai iš dviejų naujų valstybių sprendžia patys gyventojai referendumu. Ir juodųjų, ir baltųjų partijų vadovybės įsikūrussios viename po referendumo jų partijai atitekusiame rajone. Tie rajonai paskelbti abiejų būsimų valstybių sostinėmis.

Kadangi partijų nariai pasiskirstę chaotiškai, gali atsitikti taip, kad kurios nors vienos (ar abiejų) valstybių rajonai suskils į izoliuotas salas ir vienos valstybės gyventojai negalės tarpusavyje susisiekti nepažeisdami kitos valstybės teritorijos. Laikoma, kad rajonai susisiekia, jei jie turi bendrų kraštinių (kampais nepakanka liestis).

Izoliuotų rajonų situaciją galima išspręsti valstybėms keičiantis rajonais. Tarkime, kad po referendumo naujų valstybių žemėlapis atrodo taip (164.1 pav.). Baltųjų valstybė suskilusi į dvi dalis. Abi valstybės taps vientisomis, jei jos susikeis pora rajonų (164.2  pav.).
164.1 pav.
164.2 pav.
Parašykite programą, kuri sukurtų tokį abiejų valstybių žemėlapį, kad jų plotas nepakistų, sostinės liktų toje pačioje vietoje, o kiekvienos valstybės teritorija būtų vientisa.



Pradiniai duomenys įrašyti byloje PART.DAT. Pirmoje eilutėje įrašyti skaičiai n ir m (1 <= n, m <= 35, nxm >= 2). Likusiose n eilučių įrašyta po m simbolių. Pliusas „+“ reiškia baltųjų sostinę, minusas „-“ – juodųjų sostinę, taškas „.“ reiškia, kad rajonas atiteko baltųjų valstybei, žvaigždutė „*“ – kad atiteko juodųjų valstybei. Tarp simbolių tarpų nėra.

Rezultatus spausdinkite byloje PART.REZ. Jei po referendumo abi valstybės tapo vientisos, spausdinkite žodį GERAI, jei neįmanoma taip pakeisti žemėlapių, kad būtų tenkinami sąlygos reikalavimai, spausdinkite žodį NEGALIMA.

Jei valstybėms vis dėlto teks keistis rajonais, byloje įrašykite n eilučių po m simbolių kiekvienoje. Tašku žymėkite baltiesiems atitekusius rajonus, žvaigždute – juodiesiems.


Pavyzdys
Pradiniai duomenys
Rezultatai
Paaiškinimai
4 4 
-**. 
.**. 
.*.. 
+*..
***. 
.**. 
.**. 
....
Šis pavyzdys atitinka sąlygoje pateiktą pavyzdį

165. KAM LYGI SUMA. Kompiuteris veiksmus su realiaisiais skaičiais atlieka apytiksliai, todėl kartais galima gauti įdomių situacijų.

Duota programa:

program realus;
{$N+}
  var a: double;
begin
  a := ;
  if a + 1 = a
    then writeln('LYGU')
    else writeln('NELYGU')
end.

Tipas double atitinka tipą real, tik juo galima vaizduoti skaičius iš platesnio intervalo ir tikslesnius, t.y. turinčius daugiau skaitmenų.

Programoje kintamajam a nepriskirta jokia reikšmė. Jums reikia rasti tokį mažiausią teigiamą skaičių a, kad būtų spausdinamas pranešimas LYGU.



Nepabaigtą programą rasite archyve 10ol_165.zip.

Jūs turite šios programos priskyrimo sakinyje įrašyti Jūsų rastą skaičių bei aprašyti kaip ieškojote a reikšmės. 

Trečiojo etapo uždavinių sąlygos

II dalis

Vyresniųjų grupė

166. REIŠKINYS.  Duotas aritmetinis reiškinys sudarytas iš kintamųjų, operacijų +, -, *, / ir skliaustų (, ). Operacijų prioritetai tokie, kaip įprasta aritmetiniame reiškinyje: pirma atliekami veiksmai skliaustuose, o daugyba ir dalyba yra aukštesnio prioriteto nei sudėtis ir atimtis. Vienai operacijai įvykdyti reikia vieno laiko vieneto. Operacijos gali būti vykdomos lygiagrečiai, t. y. tuo pačiu metu. Taigi, per vieną laiko vienetą galima atlikti kelias operacijas.

Pavyzdžiui, turime reiškinį: a+b+(c+d)*(e+f)–(c+d)*e. Jo reikšmei suskaičiuoti prireiks keturių laiko vienetų.

Per pirmą laiko vienetą galime atlikti šiuos veiksmus:
1a := a+b;                                           1c := e+f  (antruose skliaustuose);
1b := c+d;  (pirmuose skliaustuose)      1d := c+d (trečiuose skliaustuose).

Per antrą laiko vienetą atliekame:
2a := 1b*1c;      2b := 1d*e.

Per trečią laiko vienetą atliksime operaciją:
3a := 1a+2a.

Per ketvirtą laiko vienetą suskaičiuosime reiškinio reikšmę:
4a := 3a–2b.

Parašykite algoritmą, kuris suskaičiuotų, per kiek mažiausiai laiko vienetų galima apskaičiuoti reiškinio reikšmę.

Pastaba. Negalima atskliausti ar kitaip matematiškai prastinti reiškinio. Pavyzdžiui, (a+b+c)+d nėra tapatu a+b+c+d, o (a – b) + c – (a – b) netapatu c.



Pradinis duomuo – reiškinys – pateiktas pirmoje tekstinės bylos REISK.DAT eilutėje. Jo ilgis neviršija 255 simbolių.
Reiškinyje nėra tarpų, praleistų daugybos ženklų (ab vietoje a*b), unarinės atimties (pvz.: –a), bereikalingų skliaustų (pvz.: ((a+b))*c vietoje (a+b)*c). Kiekvieno kintamojo vardą sudaro viena mažoji lotyniška raidė.


Rezultatą – minimalų operacijų skaičių – spausdinkite ekrane.

Pavyzdys
Pradiniai duomenys
 Rezultatas
a+b+(c+d)*(e+f)-(c+d)*e
4

167.  ŽODŽIŲ RATAS. (vykdymo laikas 1 min.). Duotas žodynas, sudarytas iš m žodžių, ir tuščias ratas, turintis n langelių. Langeliai sunumeruoti nuo 1 iki n laikrodžio rodyklės apėjimo tvarka.

Žodžiai (iš duoto žodyno) talpinami į ratą pagal tokias taisykles:

Pavyzdžiui, duotas žemiau esantis žodynas. Jo žodžiais pirmasis ratas užpildytas teisingai, antrasis pradėtas pildyti klaidingai. Mat dvi gretimos raidės „IS“ nepriklauso nei žodžiui „BATAI“, nei žodžiui „SAMBA“.

SAMBA
TAISYKLA
LOBIS
TIMPA
BATAI
SENIS
PALTAI
AIDAI
TIKSLO
IMTI

Parašykite algoritmą, kuris surašytų į ratą žodžius pagal aukščiau išvardintas taisykles taip, kad rate esančių žodžių ilgių suma būtų didžiausia.



Pradiniai duomenys įrašyti byloje RATAS.DAT. Pirmoje eilutėje įrašyti du skaičiai – rato dydis n (3 <= n <= 40) ir žodžių skaičius žodyne m (3 <= m <= 20).

Likusiose m eilučių įrašytas žodynas po vieną žodį į eilutę. Visi žodžiai sudaryti tik iš didžiųjų raidžių ir žodžio ilgis neviršija 20 simbolių.

Jei vieno žodžio galūnė sutampa su kito žodžio pradžia, tai vadinsime sąryšiu. Pradiniai duomenys tokie, kad sąryšių skaičius žodyne neviršija 110.



Rezultatus spausdinkite byloje RATAS.REZ. Pirmoje eilutėje įrašykite du skaičius – rate įrašytų žodžių ilgių sumą s ir rate įrašytų žodžių skaičių sk.

Į likusias 2sk eilučių įrašykite rate esančius žodžius, kiekvienam žodžiui skirdami po dvi eilutes. Pirmoje eilutėje įrašykite rato langelio numerį kuriame yra pirmoji žodžio raidė, antroje – patį žodį.

Jei sprendinio nėra, į rezultatų bylą įrašykite žodį NEGALIMA.


Pavyzdys
Pradiniai duomenys
Rezultatai
Paaiškinimai
24 10 
SAMBA 
TAISYKLA 
LOBIS 
TIMPA 
BATAI 
SENIS 
PALTAI 
AIDAI 
TIKSLO 
IMTI 
35 7 

BATAI 

AIDAI 

IMTI 
10 
TIKSLO 
14 
LOBIS 
18 
SENIS 
22 
SAMBA
 Pavyzdys atitinka aukščiau sąlygoje pateiktą pavyzdį.

168. ATMINTIES PASKIRSTYMAS. Kai kompiuterio atmintyje reikia išdėstyti duomenis, naudojamas toks algoritmas:
Jei duomenų dydis yra b baitų, tai ieškomas toks mažiausias neneigiamas skaičius k, kad b <= 2k. Tada duomenims skiriamas laisvas 2k baitų dydžio blokas.

Blokai formuojami laikantis tokių taisyklių:

Blokai numeruojami eilės tvarka. Kažkurį bloką padalijus pusiau ar sujungus du blokus, atitinkamai pasikeičia ir jų numeriai. Pavyzdžiui, yra tokia situacija.

Ketvirtąjį bloką padalijus į dvi dalis, numeracija pasikeis taip:


Duota duomenų įrašymo ir trynimo operacijų seka. Parašykite algoritmą, kuris atliktų kiek galima daugiau operacijų. Įrašymo operacijos negalima atlikti, jei trūksta vietos atmintyje.



Pradinių duomenų ir rezultatų nėra.


Visa reikalinga informacija sužinoma ir pateikiama kreipiantis į modulį atmintis. Šį modulį rasite archyve 10ol_168.zip

Pateikiame modulio procedūrų ir funkcijų antraštes:

function dydis: integer; – ši funkcija grąžina skaičių N. Žinoma, kad atminties talpa lygi 2N baitų;

function skaicius: integer; – ši funkcija grąžina dar neatliktų operacijų skaičių;

procedure oper (var op: char; var nr, b: longint); – nusako tolesnę operaciją, kurią reikia atlikti. Jei tai įrašymo operacija, tuomet op = 'R', nr parodo įrašymo operacijos numerį, b – įrašomų duomenų kiekį baitais. Jei duomenis reikia trinti, tuomet op = 'T', nr pasako kurios įrašymo operacijos metu įrašytus duomenis reikia ištrinti, kintamojo b reikšmė lieka neapibrėžta.

procedure pusiau (i: longint); – padalija i-ąjį nuo pradžios bloką į du vienodo dydžio blokus;

procedure jungti (i: longint); – sujungia i-ąjį nuo pradžios bloką su (i+1)-uoju bloku;

procedure rasyti (nr, b: longint); – įrašo b baitų į bloką, kurio numeris nr.

procedure trinti (nr: longint); – ištrina duomenis iš bloko, kurio numeris nr,

procedure baigti; – darbas užbaigiamas, kai nepavyksta atlikti kurios nors įrašymo operacijos arba kai jau atliktos visos operacijos.

Prieš skaitant naują operaciją būtina atlikti ankstesnę operaciją.


169. ŠIMTALANGĖS ŠAŠKĖS. (vykdymo laikas – 40 sek.). Šaškėmis žaidžiama šimtalangėje lentoje padalintoje į 10x10 langelių. Kai kuriuose juoduose langeliuose išdėstytos baltos ir juodos šaškės. Damų tarp jų nėra. Vaikšto tik baltosios šaškės. Juodosios šaškės arba stovi vietoje arba nuimamos nuo lentos, jeigu jas nukirto.

Baltosios šaškės vaikšto ir kerta kaip įprasta. Vienintelė išimtis – kirsti neprivaloma. Baltoji šaškė gali nekirsti, o pradėjusi kirsti juodąsias šaškes baltoji šaškė gali bet kada sustoti.

Parašykite algoritmą, kuris suskaičiuotų, kiek mažiausiai ėjimų reikia, norint, kad žaidžiantysis šaškėmis įgytų baltąją damą, t. y. viena baltųjų šaškių virstų dama.



Pradiniai duomenys įrašyti byloje SASKE.DAT. Pirmoje eilutėje įrašytas baltų šaškių skaičius b (1 <= b <= 3). Antroje eilutėje įrašyti langelių, kuriuose stovi baltos šaškės, numeriai. Trečioje eilutėje įrašytas juodųjų šaškių skaičius j (14 <= j <= 20). Ketvirtoje –langelių, kuriuose stovi juodos šaškės, numeriai.

Antroje ir ketvirtoje eilutėje tarp numerių palikta po vieną tarpą.



Rezultatą – mažiausią ėjimų skaičių bei pačius ėjimus spausdinkite byloje. Pirmoje eilutėje spausdinkite ėjimų skaičių, likusiose – pačius ėjimus, po vieną ėjimą į eilutę. Ėjimą apibūdina aplankytų (įskaitant pradinį) langelių numerių seka. Langeliai turi būti išvardinti ta tvarka, kuria jie buvo aplankyti.

Sprendime ėjimų skaičius neviršys 15 ėjimų.

Jei nei viena baltoji šaškė negali tapti dama, tuomet rezultatas turi būti lygus nuliui.


Pavyzdys
Pradiniai duomenys
1
18
14
1 2 3 6 7 8 11 31 32 39 40 42 45 46
Rezultatai

18 23 
23 27 
27 36 47



Nežaidžiantiems šaškėmis. Langelių numeracija parodyta 169.2 pav.

169.2 pav.

Vienu ėjimu baltoji šaškė gali paeiti arba įstrižai į kairę arba įstrižai į dešinę, jei tas langelis yra tuščias (169.3 pav.).

169.3 pav.

Jei tame langelyje stovi juodoji šaškė, o už jos tuščias langelis, tą šaškę galima nukirsti. Vienu ėjimu galima nukirsti kelias šaškes. Kirsti galima ir pirmyn ir atgal.

169.4 pav.

Baltųjų šaškė virsta dama, kai ji pasiekia pirmą eilutę (46–50 langelius).


170. PAKEISK ŽODĮ. Duoti du žodžiai. Iš pirmojo žodžio pagal nurodytas taisykles reikia gauti antrą žodį.

Keičiama taikant šias operacijas:
 
Perkelti žymeklis pastumiamas per vieną simbolį į dešinę;
Pašalinti pašalinamas simbolis, kurį rodo žymeklis; žymeklis rodo tolesnį simbolį;
Pakeisti (x) simbolis, kurį rodo žymeklis, pakeičiamas simboliu x; žymeklis lieka toje pačioje vietoje;
Įterpti (x) prieš žymeklio rodomą simbolį įterpiamas simbolis x; žymeklis lieka toje pačioje vietoje;
Numesti pašalinamas visas žodžio galas, pradedant simboliu, kurį rodo žymeklis (įskaitant ir žymeklio rodomą simbolį); tai gali būti tik paskutinė operacija; žymeklis rodo žodžio pabaigos simbolį.

  Pradžioje žymeklis visuomet stovi žodžio pradžioje, ties pirmuoju simboliu. Iš vieno žodžio gauti kitą galima daugeliu būdų. Pavyzdžiui, iš žodžio „matai“ gauti žodį „pamatė“ galime šitaip:
 
Operacija
Žodis 
matai
Įterpti (p) pmatai
Įterpti (a) pamatai
Perkelti pamatai
Perkelti pamatai
Perkelti pamatai
Pašalinti pamati
Pakeisti (ė) pamatė
Perkelti pamatė_

Čia žodį pakeitėme pavartoję 8 operacijas. O gal galima tai padaryti dar greičiau?

Parašykite programą, kuri rastų greičiausią būdą, t. y. mažiausią skaičių operacijų, duotam žodžiui pakeisti kitu duotu žodžiu taikant nurodytas operacijas.

Laikoma, kad po paskutiniojo žodžio simbolio eina žodžio pabaigos simbolis. Baigus, žymeklis turi rodyti žodžio pabaigos simbolį, o žymekliui atsistojus ties šiuo simboliu darbas baigiamas.



Pradiniai duomenys įrašyti dviejose tekstinės bylos KEISTI. DAT eilutėse. Pirmoje – pirmasis žodis, antroje – antrasis.

Abu žodžiai sudaryti tik iš mažųjų raidžių ir kiekvieno ilgis neviršija ….. simbolių.



Rezultatą – minimalų operacijų skaičių spausdinkite ekrane.

Pavyzdys
Pradiniai duomenys
 Rezultatas
mato
pamatė
7

171. GELEŽINKELIO GROTELĖS. Yra žinomas toks šifravimo algoritmas, vadinamas „Geležinkelio grotelių“ metodu. Pavyzdžiui, turime sakinį „AŠ PASKAMBINSIU“ ir skaičių k = 6. Skaičių k vadinsime aukščiu. Sakinį užrašykime tokiu būdu:

Tarpo simbolis čia pakeistas pabraukimu.

Dabar užrašykime pirmą eilutę, po jos – antrą ir t.t.

AI
ŠBN
_MS
PAI
AKU
S

Gauname tokį užšifruotą tekstą: „AIŠBN MSPAIAKUS“.



Užduotis. Yra duotos užšifruoto teksto eilutės surikiuotos nežinoma tvarka. Taip pat pateikiamas to paties teksto neužšifruotas fragmentas. Parašykite algoritmą, kuris atkurtų tikrąją eilučių tvarką.

Žemiau matote, kaip galėtų atrodyti mūsų pavyzdžio eilutės surikiuotos nežinoma tvarka. Neužšifruotas fragmentas galėtų būti „SKAMB“.

ŠBN
PAI
AI
_MS
S
AKU 



Pradiniai duomenys įrašyti tekstinėje byloje GROTEL.DAT. Pirmoje eilutėje įrašytas skaičius k (1 <= k <= 12.), antroje – neužšifruoto teksto fragmentas. Likusiose k eilučių atsitiktine tvarka pateiktos užšifruoto teksto eilutės.

Nei vienos duomenų eilutės, kurioje įrašytas tekstas, ilgis neviršija 255 simbolių. Tekstas gali būti sudarytas iš didžiųjų bei mažųjų raidžių, įvairių kitų nevaldančių simbolių bei tabuliacijos simbolio. Didžiosios ir mažosios raidės tekste laikomos skirtingomis. Kiekvienas simbolis tekste pasikartoja ne daugiau 1000 kartų.

Duomenų pavyzdžius rasite bylose GROTEL1.DAT ir GROTEL2.DAT. Neužšifruoti tekstai, atitinkantys šiuos duomenis, įrašyti bylose GROTEL1.TXT ir GROTEL2.TXT. Bylas rasite archyve 10ol_171.zip.



Rezultatai pateikiami tekstinėje byloje. Į ją reikia įrašyti k užšifruoto teksto eilučių, išdėstytų „teisinga“ tvarka. Jei galimi keli sprendiniai, pateikite bet kurį vieną.

Pavyzdys
Pradiniai duomenys
Rezultatai
6
SKAMB
ŠBN
PAI
AI
_MS
S
AKU
AI
ŠBN
_MS
PAI
AKU
S


172. SVEČIAI IŠ JAPONIJOS. Mokykloje apsilankė moksleivių iš Japonijos delegacija. Atvykus svečiams buvo surengta vakaronė per kurią jie susipažino su vietiniais moksleiviais.

Vakare vietiniai moksleiviai turėjo pasidalinti svečius po namus, kur jie gyventų visą viešnagės laiką. Vienam moksleiviui leidžiama apnakvydinti tik vieną svečią. Mokytojas surinko vietos moksleivių pageidavimus. Kiekvienas moksleivis pateikė sąrašą svečių, su kuriais jis susipažino ir vieną iš kurių jis sutiktų priimti.

Parašykite algoritmą, kuris padėtų mokytojui paskirstyti svečius taip, kad patenkintų moksleivių (vietinių ir svečių) skaičius būtų didžiausias. Savaime suprantma, kad visi japonai turi būti apgyvendinti.

Pastaba. Moksleivio pageidavimas laikomas abipusiu sąryšiu: t. y. jei Jonas nori apgyvendinti Chau Youd, tai reiškia, kad Chau Youd sutinka gyventi pas Joną. Ir analogiškai, jei Petras nenori priimti Chau Youd ir jo neįtraukė į savo sąrašą, tai reiškia, kad Chau Youd taip pat nenori gyventi pas Petrą.



Pradiniai duomenys įrašyti byloje. Pirmoje eilutėje pateiktas vietinių moksleivių skaičius n bei svečių skaičius m (1 <= n, m <= 50, n <= m). Laikoma, kad vietiniai moksleiviai sunumeruoti nuo 1 iki n, japonai – nuo 1 iki m.

Likusiose n eilučių įrašyti vietinių moksleivių pageidavimai. Vieno moksleivio pageidavimams skiriama viena eilutė. Taigi antroje eilutėje įrašyti pirmojo moksleivio pageidavimai, trečioje – antrojo ir t.t.

Pirmasis skaičius eilutėje reiškia sąrašo ilgį ilg, likusieji ilg skaičių – japonų, kuriuos norėtų apgyvendinti moksleivis, numerius.



Rezultatus rašykite į bylą. Bylą turi sudaryti m eilučių. i-toje eilutėje turi būti įrašytas vietinio moksleivio, kuris apgyvendins i-tąjį japonų moksleivį, numeris.

Pavyzdys
Pradiniai duomenys
Rezultatai
Paaiškinimai
5 4 
1 1 
2 1 3
3 2 3 4
1 3
1 3 
2
3
5
1
Pirmasis vietinis moksleivis sutinka priimti tik pirmą japoniuką, antrasis – pirmą ir trečią ir t.t.Paskirsčius moksleivius, pirmąjį japoniuką priims antrasis moksleivis, antrąjį trečiasis ir t.t.Taip paskirsčius iš devynių moksleivių bus patenkinti šeši: trys vietiniai ir trys svečiai.