Brisbanen ovat vallanneet mutaattivompatit, ja tehtäväsi on johdattaa ihmiset turvaan.

Samankaltaiset tiedostot
International Olympiad in Informatics 2013

S: siirtää listan ensimmäisen luvun viimeiseksi V: vaihtaa keskenään listan kaksi ensimmäistä lukua

Maahan on pudonnut omenoita, ja Uolevi aikoo poimia niitä. Tiedät jokaisesta omenasta, kuinka painava se on.

Syötteen ensimmäisellä rivillä on kokonaisluku n, testien määrä (1 n 10). Tämän jälkeen jokaisella seuraavalla rivillä on kokonaisluku x (0 x 1000).

Ohjelmoinnin perusteet Y Python

Rakenteiset tietotyypit Moniulotteiset taulukot

Uolevin reitti. Kuvaus. Syöte (stdin) Tuloste (stdout) Esimerkki 1. Esimerkki 2

Numeropelissä 3x3-ruudukko sisältää luvut 1, 2,, 9. Tehtäväsi on järjestää ruudukko näin:

Ohjelmoinnin perusteet Y Python

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

Kaulaketju. Syöte. Tuloste. Esimerkki 1. Esimerkki 2

Tietorakenteet ja algoritmit

Datatähti 2019 loppu

Tietorakenteet ja algoritmit

Kohdissa 2 ja 3 jos lukujen valintaan on useita vaihtoehtoja, valitaan sellaiset luvut, jotka ovat mahdollisimman lähellä listan alkua.

Esimerkiksi jos käytössä ovat kirjaimet FFII, mahdolliset nimet ovat FIFI ja IFIF. Näistä aakkosjärjestykssä ensimmäinen nimi on FIFI.

Tietorakenteet ja algoritmit

Osoitin ja viittaus C++:ssa

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

Ohjelmoinnin jatkokurssi, kurssikoe

Task list Submit code Submissions Messages Scoreboard View queue Edit contest

ASCII-taidetta. Intro: Python

Ohjelmoinnin perusteet Y Python

Tehtävä: FIL Tiedostopolut

812336A C++ -kielen perusteet,

Sokkelon sisältö säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

Ohjelmoinnin perusteet Y Python

Datatähti 2019 alku. task type time limit memory limit. A Kolikot standard 1.00 s 512 MB. B Leimasin standard 1.00 s 512 MB

Toinen harjoitustyö. ASCII-grafiikkaa

Ohjelmoinnin perusteet Y Python

Tietueet. Tietueiden määrittely

Toinen harjoitustyö. ASCII-grafiikkaa 2017

Ohjelmoinnin perusteet Y Python

Harjoitus 5 (viikko 48)

Ohjelmoinnin perusteet Y Python

Datatähti 2000: alkukilpailun ohjelmointitehtävä

Yhdistäminen. Tietolähteen luominen. Word-taulukko. Joukkokirje, osoitetarrat Työvälineohjelmistot 1(5)

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:

Harjoitus 6 (viikko 42)

finnish BOI 2015, päivä 1. Muistiraja: 256 MB

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Harjoitustyö 3 - Millosemeni

Tarina-tehtävän ratkaisu

Luento 5. Timo Savola. 28. huhtikuuta 2006

Tietorakenteet ja algoritmit

Sinulle on annettu bittijono, ja tehtäväsi on muuttaa jonoa niin, että jokainen bitti on 0.

Alikulkutunnelin eteläpään puolella opastaulun takana P: I: Heinästie x Heinästie 42. Autotallin ovessa. P: I:

TIETORAKENTEET JA ALGORITMIT

Metropolia ammattikorkeakoulu TI00AA : Ohjelmointi Kotitehtävät 3 opettaja: Pasi Ranne

Metropolia ammattikorkeakoulu TI00AA : Ohjelmointi Kotitehtävät 3

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Sisältö. 2. Taulukot. Yleistä. Yleistä

Tietorakenteet ja algoritmit

Osa. Listaus 2.1. HELLO.CPP esittelee C++ -ohjelman osat. 14: #include <iostream.h> 15: 16: int main() 17: {

7. Näytölle tulostaminen 7.1

Harjoitus 1 (viikko 44)

Sisältö. 22. Taulukot. Yleistä. Yleistä

6.3. AVR_rauta. EEPROM-muisti pva

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Moduli 4: Moniulotteiset taulukot & Bittioperaatiot

KAISTAT. Ensimmäinen numero määräytyy seuraavasti: 1X = kaista tieosoitteen kasvusuuntaan 2X = kaista tieosoitteen kasvusuuntaa vastaan

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003

Löydätkö tien. taivaaseen?

Harjoitus 3 (viikko 39)

Lineaarialgebra MATH.1040 / Piirianalyysiä

Puzzle SM Pistelasku

Kielioppia: toisin kuin Javassa

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

Moduli 5: Kehittyneitä piirteitä

Määrittelydokumentti

Excel-harjoitus 1. Tietojen syöttö työkirjaan. Taulukon muotoilu

linux: Ympäristömuuttujat

Taulukkolaskenta (30 pistettä)

5.6. C-kielen perusteet, osa 6/8, Taulukko , pva, kuvat jma

KUVAN TUOMINEN, MUOKKAAMINEN, KOON MUUTTAMINEN JA TALLENTAMINEN PAINTISSA

Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ).

Ohjelmoinnin peruskurssi Y1

KAAVAT. Sisällysluettelo

Webforum. Version 15.1 uudet ominaisuudet. Päivitetty:

Kääntäjän virheilmoituksia

Luku 8. Aluekyselyt. 8.1 Summataulukko

58131 Tietorakenteet ja algoritmit (syksy 2015)

Sipoo Hangelby-Box mt. 170:n parantamisalueen muinaisjäännösinventointi 2012

Harjoitus 6 (viikko 42)

Ohjelmointiharjoituksia Arduino-ympäristössä

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

SAPA PINTALISTAT Muotoile Add, Expressive ja Optima -pintalistoilla

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

T Olio-ohjelmointi Osa 3: Luokka, muodostin ja hajotin, this-osoitin Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

Avaa ohjelma ja tarvittaessa Tiedosto -> Uusi kilpailutiedosto

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

GeoGebra-harjoituksia malu-opettajille

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Ohjelmoinnin perusteet Y Python

Harjoitus 6. Käytä String-luokasta vain charat- ja length-operaatioita.

Transkriptio:

6-13 July 2013 Brisbane, Australia Finnish 1.0 Brisbanen ovat vallanneet mutaattivompatit, ja tehtäväsi on johdattaa ihmiset turvaan. Brisbanen katuja esittää suuri ruudukko. Siinä on R vaakasuuntaista tietä länsi-itä-suunnassa, jotka on numeroitu 0,, (R - 1) järjestyksessä pohjoisesta etelään, sekä C pystysuuntaista tietä pohjois-etelä-suunnassa, jotka on numeroitu 0,, (C - 1) järjestyksessä lännestä itään. Alla oleva kuva selventää asiaa. Vompatit saapuvat pohjoisesta, ja ihmiset pakenevat etelään. Ihmiset voivat liikkua vaakasuuntaisia teitä molempiin suuntiin, mutta he voivat liikkua pystysuuntaisia teitä turvaan. Vaakasuuntaisen tien P ja pystysuuntaisen tien Q risteys merkitään (P, Q). Jokaisella kahden risteyksen välisellä tieosuudella on tietty määrä vompatteja, ja tämä määrä saattaa vaihdella ajan kuluessa. Tehtäväsi on johdattaa jokainen ihminen tietystä pohjoisessa olevasta risteyksestä (vaakasuuntaisella tiellä 0 ) tiettyyn etelässä olevaan risteykseen (vaakasuuntaisella tiellä R - 1 ) käyttäen reittiä, jonka varrella on mahdollisimman vähän vompatteja. Aluksi sinulle annetaan ruudukon koko sekä vompattien määrä kullakin tieosuudella. Tämän jälkeen sinulle annetaan E tapahtumaa, joista jokainen on joko:, joka vaihtaa vompattien määrän jollain tieosuudella, tai, jossa ihminen saapuu tiettyyn risteykseen vaakasuuntaisella tiellä täytyy etsiä sellainen reitti tiettyyn risteykseen vaakasuuntaisella tiellä varrella on mahdollisimman vähän vompatteja. 0, ja sinun R - 1, jonka 1

Sinun täytyy käsitellä nämä tapahtumat toteuttamalla funktiot init(), changeh(), changev() ja escape() alla olevan mukaisesti. Yllä olevassa kuvassa on alkutilanteessa oleva kartta, jossa on R = 3 vaakasuuntaista tietä sekä C = 4 pystysuuntaista tietä sekä vompattien määrä kullakin tieosuudella. Tarkastellaan seuraavaa tapahtumasarjaa: Ihminen saapuu risteykseen A = (0, 2) ja haluaa paeta risteykseen B = (2, 1). Pienin mahdollinen vompattien määrä reitin varrella on 2 katkoviivan mukaisesti. Toinen ihminen saapuu risteykseen X = (0, 3) ja haluaa paeta risteykseen Y = (2, 3). Pienin mahdollinen vompattien määrä reitin varrella on 7 jälleen katkoviivan mukaisesti. Kaksi muutosta tapahtuu: vompattien määrä pystysuuntaisen tien 0 ylimmällä osuudella on nyt 5, ja vompattien määrä vaakasuuntaisen tien 1 keskiosuudella on nyt 6. Nämä kohdat on ympyröity alla olevassa kuvassa. 2

Kolmas ihminen saapuu risteykseen A = (0, 2) ja haluaa paeta risteykseen B = (2, 1). Nyt pienin vompattien määrä on 5 uuden katkoviivan mukaisesti. Sinun täytyy lähettää tiedosto, jossa on toteutettuna funktiot init(), changeh(), changev() ja escape() seuraavasti: 3

init() C/C++ void init(int R, int C, int H[5000][200], int V[5000][200]); type wombatsarraytype = array[0..4999, 0..199] of LongInt; procedure init(r, C : LongInt; var H, V : wombatsarraytype); Kuvaus Tämän funktion kautta saat kartan aloitustilanteen, ja voit alustaa mitä tahansa globaaleita muuttujia ja tietorakenteita. Funktiota kutsutaan vain kerran ennen kaikkia kutsuja funktioihin changeh(), changev() ja escape(). Parametrit R : Vaakasuuntaisten teiden määrä. C : Pystysuuntaisten teiden määrä. H : Kaksiulotteinen taulukko kokoa R (C - 1), jossa H[P][Q] on vompattien määrä vaakasuuntaisella tieosuudella risteysten (P, Q) ja (P, Q + 1) välillä. V : Kaksiulotteinen taulukko kokoa (R - 1) C, jossa V[P][Q] on vompattien määrä pystysuuntaisella tieosuudella risteysten (P, Q) ja (P + 1, Q) välillä. 4

changeh() C/C++ void changeh(int P, int Q, int W); procedure changeh(p, Q, W: LongInt); Kuvaus Tätä funktiota kutsutaan, kun vompattien määrä muuttuu vaakasuuntaisella tieosuudella risteysten (P, Q) ja (P, Q + 1) välillä. Parametrit P : Vaakasuuntainen tie, jossa muutos tapahtuu ( 0 P R - 1 ). Q : Kaksi pystysuuntaista tietä ( 0 Q C - 2 ), joiden välissä tieosuus sijaitsee. W : Uusi vompattien määrä tällä tieosuudella ( 0 W 1 000 ). 5

changev() C/C++ void changev(int P, int Q, int W); procedure changev(p, Q, W: LongInt); Kuvaus Tätä funktiota kutsutaan, kun vompattien määrä muuttuu pystysuuntaisella tieosuudella risteysten (P, Q) ja (P + 1, Q) välillä. Parametrit P : Kaksi vaakasuuntaista tietä ( 0 P R - 2 ), joiden välissä tieosuus sijaitsee. Q : Pystysuuntainen tie, jossa muutos tapahtuu ( 0 Q C - 1 ). W : Uusi vompattien määrä tällä tieosuudella ( 0 W 1 000 ). escape() C/C++ int escape(int V1, int V2); function escape(v1, V2 : LongInt) : LongInt; Kuvaus Tämän funktio tulee laskea pienin mahdollinen vompattien määrä reitillä risteyksestä (0, V1) risteykseen (R-1, V2). Parametrit V1 : Ihmisen aloituskohta vaakarivillä 0 ( 0 V1 C-1 ). V2 : Ihmisen lopetuskohta vaakarivillä R-1 ( 0 V2 C-1 ). : Pienin vompattien määrä reitin varrella. 6

Seuraava istunto vastaa edellä ollutta esimerkkiä: init(3, 4, [[0,2,5], [7,1,1], [0,4,0]], [[0,0,0,2], [0,3,4,7]]) escape(2,1) 2 escape(3,3) 7 changev(0,0,5) changeh(1,1,6) escape(2,1) 5 Aikaraja: 15 sekuntia Muistiraja: 256 MiB 2 R 5000 1 C 200 Korkeintaan 500 funktioiden changeh() ja changev() kutsua Korkeintaan 200000 funktion escape() kutsua Korkeintaan 1000 vompattia tietyllä tieosuudella tietyllä hetkellä 7

1 9 C = 1 2 12 R,C 20 ja ei kutsuja funktioihin changeh() tai changev() 3 16 R,C 100 ja korkeintaan 100 kutsua funktioon escape() 4 18 C = 2 5 21 C 100 6 24 Esimerkkiarvostelija lukee syötteen tiedostosta wombats.in, jonka muodon tulee olla seuraava: rivi 1: R C rivi 2: H[0][0] H[0][C-2] rivi (R + 1) : H[R-1][0] H[R-1][C-2] rivi (R + 2) : V[0][0] V[0][C-1] rivi (2R) : V[R-2][0] V[R-2][C-1] seuraava rivi: E seuraavat E riviä: yksi tapahtuma joka rivillä niiden tapahtumisjärjestyksessä Jos C = 1, ei ole tarpeen merkitä tyhjiä rivejä, jotka kuvaisivat vompattien määrä vaakasuuntaisilla teillä (rivistä 2 riviin R + 1 ). Jokainen tapahtuma tulee ilmoittaa seuraavanmuotoisella rivillä: tapahtuma changeh(p, Q, W) : 1 P Q W tapahtuma changev(p, Q, W) : 2 P Q W tapahtuma escape(v1, V2) : 3 V1 V2 8

Esimerkiksi yllä oleva esimerkki tulisi antaa seuraavassa muodossa: 3 4 0 2 5 7 1 1 0 4 0 0 0 0 2 0 3 4 7 5 3 2 1 3 3 3 2 0 0 5 1 1 1 6 3 2 1 C/C++ You must #include "wombats.h". You must define the unit Wombats. All arrays are numbered beginning at 0 (not 1 ). See the solution templates on your machine for examples. 9