Tehtävä: FIL Tiedostopolut



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

Datatähti 2019 loppu

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

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

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

Task list Submit code Submissions Messages Scoreboard View queue Edit contest

Task list Submit code Submissions Scoreboard View queue Edit contest

International Olympiad in Informatics 2013

Toisessa kyselyssä alueella on 1 ruudussa A ja 3 ruudussa B, joten suosituin ehdokas on B.

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).

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

Taulukkolaskennan perusteet Taulukkolaskentaohjelmat

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

Ohjelmoinnin peruskurssi Y1

Syötteen ainoalla rivillä on yksi positiivinen kokonaisluku, joka on alle = Luvussa ei esiinny missään kohtaa numeroa 0.

Merkkijono on palindromi, jos se säilyy samana, vaikka sen kääntää väärinpäin.

n! k!(n k)! n = Binomikerroin voidaan laskea pelkästään yhteenlaskun avulla käyttäen allaolevia ns. palautuskaavoja.

Task list Submit code Submissions Messages Scoreboard View queue Edit contest

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

KServer Etäohjaus Spesifikaatio asiakaspuolen toteutuksille

Taulukkolaskennan perusteet Taulukkolaskentaohjelmat

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

Aluksi Kahden muuttujan lineaarinen yhtälö

Kenguru 2019 Student lukio

Kenguru 2019 Cadet (8. ja 9. luokka)

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

- Jalkapalloa jokaiselle -

Simulaattorin asennus- ja käyttöohje

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

Puzzle-SM Loppukilpailu Oulu

Datatähti alkukilpailu

FOTONETTI BOOK CREATOR

Ohjelmoinnin jatkokurssi, kurssikoe

joissa on 0 4 oikeata vastausta. Laskimet eivät ole sallittuja.

1 Asentaminen. 2 Yleistä ja simuloinnin aloitus 12/

3M Online Center sivuston käyttöopas

HOW-TO: Kuinka saan yhdistettyä kaksi tulospalvelukonetta keskenään verkkoon? [Windows XP]

Työsähköpostin sisällön siirto uuteen postijärjestelmään

Ohjelmoinnin perusteet Y Python

WCONDES OHJEET ITÄRASTEILLE (tehty Condes versiolle 8)

Kesäkisasäännöt Hyväksytty hallituksen kokouksessa

Kenguru 2013 Benjamin sivu 1 / 7 (6. ja 7. luokka) yhteistyössä Pakilan ala-asteen kanssa

Ohjelmoinnin perusteet Y Python

Kenguru 2013 Student sivu 1 / 7 (lukion 2. ja 3. vuosi)

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Ohjelmoinnin perusteet Y Python

3. Kirjoita seuraavat joukot luettelemalla niiden alkiot, jos mahdollista. Onko jokin joukoista tyhjä joukko?

Oulun seitsemäsluokkalaisten matematiikkakilpailu Tehtävät ja ratkaisut

Hannu Mäkiö. kertolasku * jakolasku / potenssiin korotus ^ Syöte Geogebran vastaus

Tiedostojen siirto ja FTP - 1

Avaa ohjelma ja tarvittaessa Tiedosto -> Uusi kilpailutiedosto

Tee html-sivu, jossa on yllä olevat kaksi taulukkoa.

Kenguru 2017 Student lukio

Kilpailuhakemuksen luonti IRMA-järjestelmässä

AMMATTIKORKEAKOULUJEN TEKNIIKAN VALINTAKOE

ALHAMBRA. Muuri Seralji Puutarha Holvikäytävä Paviljonki Asuinrakennus Torni Rakennuksen nimi Hinta

Octo käyttöohje 1. Sisältö

1. Mikä on lukujen 10, 9, 8,..., 9, 10 summa? 2. Mikä on lukujen 10, 9, 8,..., 9, 10 tulo? =?

Kenguru 2012 Cadet (8. ja 9. luokka)

Datatähti-alkukilpailu 2005

Datatähti 2000: alkukilpailun ohjelmointitehtävä

SOTILASURHEILULIITON SALIBANDYMESTARUUSTURNAUS 2014

y=-3x+2 y=2x-3 y=3x+2 x = = 6

Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla

EeNet materiaalit ohje

YH1b: Office365 II, verkko-opiskelu

TEHTÄVIEN PALAUTTAMINEN MOODLEEN

Kenguru 2014 Ecolier (4. ja 5. luokka)

Freestanding Asennusohjeet

Kenguru 2010 Benjamin (6. ja 7. luokka) sivu 1 / 5

Luento 3. Timo Savola. 7. huhtikuuta 2006

Kotisivuohjeet. Eteläpohjalaiset Kylät ry. Sivupohjien rakenne

Datatähti alkukilpailu

Metropolia ammattikorkeakoulu TI00AA : Ohjelmointi Kotitehtävät 3

Punomo Tee itse -julkaisun tekeminen

Muinaiset kreikkalaiset uskoivat kaiken maanpäällisen koostuvan neljästä elementistä: maasta, ilmasta, vedestä ja tulesta.

Kenguru 2012 Student sivu 1 / 8 (lukion 2. ja 3. vuosi)

Tehtävä Vastaus

Kaikkiin tehtäviin laskuja, kuvia tai muita perusteluja näkyviin.

Tee konseptiin pisteytysruudukko! Muista kirjata nimesi ja ryhmäsi. Lue ohjeet huolellisesti!

Johdatus Ohjelmointiin

Kenguru 2014 Student sivu 1 / 8 (lukion 2. ja 3. vuosi)

Lyhyt ABC Haka-junioreiden sivuille

MAB3 - Harjoitustehtävien ratkaisut:

TEEMA 2 TAULUKKODATAN KÄSITTELY JA TIEDON VISUALISOINTI

Puzzle SM Pistelasku

TCP/IP-protokollat ja DNS

Tietotekniikan valintakoe

Miten siirrän omat työni Office 365:stä Peda.nettiin sekä jaan sen siellä muille Eija Arvola

HUOMIOITAVAA SAVUILMOITTAUTUMISESSA

Scifest-loppuraportti Jani Hovi kortin temppu

Ohjelmoinnin perusteet Y Python

Asko Ikävalko, k TP02S-D. Ohjelmointi (C-kieli) Projektityö. Työn valvoja: Olli Hämäläinen

Coolselector Asennusohje

Toiminta ennen ensimmäistä ottelua (1/2)

opiskelijan ohje - kirjautuminen

Winter Tour 2015 PariScramble Open ja Personal Open

4. Varastossa on 24, 23, 17 ja 16 kg:n säkkejä. Miten voidaan toimittaa täsmälleen 100 kg:n tilaus avaamatta yhtään säkkiä?

Pelaajat siirtävät nappuloitaan vastakkaisiin suuntiin pelilaudalla. Peli alkaa näin. Tuplauskuutio asetetaan yhtä kauas kummastakin pelaajasta.

Transkriptio:

Tehtävä: FIL Tiedostopolut finnish BOI 2015, päivä 2. Muistiraja: 256 MB. 1.05.2015 Jarkka pitää vaarallisesta elämästä. Hän juoksee saksien kanssa, lähettää ratkaisuja kisatehtäviin testaamatta esimerkkisyötteillä ja haluaa, että kaikissa hänen tiedostoissaan tiedostopolku on tarkalleen niin pitkä, kuin käyttöjärjestelmä sallii (esimerkiksi Linuxissa 4095 merkkiä). Kun Jarkka käyttää jonkun toisen konetta, saattaa käydä niin, että kaikki tiedostot eivät noudata tätä vaatimusta. Tässä tilanteessa hän yrittää lisätä symbolisia linkkejä ja käyttää niitä tiedostopolkujen luontiin. Tehtäväsi on selvittää kullekin järjestelmässä olevalle tiedostolle, voiko Jarkka lisätä yhden symbolisen linkin (jonka pituus on etukäteen valittu) niin, että tiedostoon voi viitata tarkalleen k merkin pituisella tiedostopolulla. Jos tiedosto nimeltä file on hakemistoketjun dir1, dir2,..., dirj päässä, sen absoluuttinen tiedostopolku on /dir1/dir2/.../dirj/file. Merkintä / viittaa juurihakemistoon, ja jos tiedosto sijaitsee suoraan tässä hakemistossa, sen absoluuttinen polku on muotoa /file. Symbolinen linkki on hakemistoon osoittava oikotie, ja linkin voi sijoittaa mihin tahansa tiedostojärjestelmän hakemistoon. Tässä tehtävässä ei ole sallittua tehdä symbolista linkkiä tiedostoon. Symbolisen linkin avulla on mahdollista tuottaa vaihtoehtoisia tiedostopolkuja. Esimerkiksi jos hakemistoon / lisätään symbolinen linkki hello, joka osoittaa hakemistoon /, polut /dir/file, /hello/dir/file ja /hello/hello/dir/file viittaavat kaikki samaan tiedostoon, mutta kunkin polun pituus on eri. Toisena esimerkkinä jos hakemistoon /dir lisätään symbolinen linkki hi, joka osoittaa hakemistoon /, mahdollisia tiedostopolkuja ovat /dir/file, /dir/hi/dir/file ja /dir/hi/dir/hi/dir/file. Huomaa, että symbolinen linkki voi osoittaa ylöspäin, alaspäin tai sivuittain tiedostojärjestelmässä, ja jopa samaan hakemistoon, johon se on sijoitettu. Tässä tehtävässä./ ja../ ja // eivät ole sallittuja polun osia. Syöte Syötteen ensimmäisellä rivillä on kolme positivista kokonaislukua: n (muiden hakemistojen kuin juurihakemiston määrä), m (tiedostojen määrä) ja k (haluttu tiedostopolun pituus). Juurihakemiston tunnus on 0, ja kaikki muut hakemistot on numeroitu 1... n. Tiedostot on numeroitu 1... m. Toisella rivillä on luku s, lisättävän symbolisen linkin nimen pituus (nimellä itsessään ei ole väliä, ja se ei ole sama kuin mikään muu nimi tiedostojärjestelmässä). Tämän jälkeen tulee n riviä, jotka kuvaavat tiedostojärjestelmän hakemistot (muut kuin juurihakemiston). Rivillä i on kuvaus hakemistosta i, joka muodostuu kahdesta kokonaisluvusta: p i ja l i. Ne tarkoittavat, että hakemiston i nimessä on l i kirjainta ja sitä ylempi hakemisto (eli hakemisto, jossa hakemisto i sijaitsee), on hakemisto p i. On varmaa, että p i < i. Lopuksi tulee m riviä, jotka kuvaavat tiedostojärjestelmän tiedostot. Rivillä j on kuvaus tiedostosta j, joka muodostuu kahdesta kokonaisluvusta: p j ja l j. Ne tarkoittavat, että tiedoston j nimessä on l j merkkiä ja tiedosto sijaitsee hakemistossa p j. Jokaisen tiedoston ja hakemiston nimen pituus on positiivinen, ja absoluuttisen tiedostopolun pituus on enintään k merkkiä. Tuloste Ohjelmasi tulee tulostaa m riviä, yksi jokaista tiedostoa kohden. Rivillä j tulee olla yksi sana, tai NO, joka vastaa kysymykseen: onko mahdollista lisätä s-pituinen symbolinen linkki niin, että tarkalleen k merkin pituinen tiedostopolku viittaa tiedostoon j? v. 3.00 Tiedostopolut 1/2

Esimerkit 2 4 22 2 0 1 1 5 2 13 2 10 1 4 0 7 NO Esimerkkien selitys: Olkoon symbolinen linkki LL, hakemistojen nimet a ja bbbbb, sekä tiedostojen nimet ccccccccccccc, dddddddddd, eeee ja fffffff. Juurihakemistossa on hakemisto a ja tiedosto fffffff; hakemistossa a on hakemisto bbbbb ja tiedosto eeee; ja lopulta hakemistossa bbbbb on tiedostot ccccccccccccc ja dddddddddd. / -- a -- bbbbb -- ccccccccccccc +-- dddddddddd +-- eeee +-- fffffff Ensimmäisessä tapauksessa absoluuttisen tiedostopolun /a/bbbbb/ccccccccccccc pituus on valmiiksi haluttu, joten symbolista linkkiä ei edes tarvita. Toisessa tapauksessa voidaan lisätä symbolinen linkki /a/ll -> /a ja viitata tiedostoon /a/ll/bbbbb/dddddddddd. Kolmannessa tapauksessa voidaan lisätä symbolinen linkki /a/ll -> / ja viitata tiedostoon /a/ll/a/ll/a/ll/a/eeee. Neljännessä tapauksessa ei ole mitenkään mahdollista saavuttaa tavoitetta symbolisen linkin avulla. Arvostelu Kaikissa osatehtävissä 1 k, s 1 000 000. Osatehtävä Rajat Pisteet 1 n, m 500 33 2 n, m 3000 ja jos tiedostoa koskeva vastaus on myönteinen, on mahdollista 33 lisätä symbolinen linkki, jonka kautta täytyy kulkea korkeintaan kerran 3 n, m 3000 34 v. 3.00 Tiedostopolut 2/2

Tehtävä: HAC Hakkeri finnish BOI 2015, päivä 2. Muistiraja: 256 MB. 1.05.2015 Hakkeri-Jarkka osallistuu tänä vuonna IHO-kisaan (International Hacking Olympiad). Olympialaisten osana on tehtävä, jossa täytyy kilpailla järjestelmän ylläpitäjää vastaan. Tehtävässä on n tietokonetta, jotka on numeroitu 1... n ja kytketty renkaan muotoiseen verkkoon siten, että koneet i ja i + 1 on yhdistetty (kun i = 1,..., n 1) ja lisäksi koneet n ja 1 on yhdistetty. Kamppailussa vastakkain ovat hakkeri ja ylläpitäjä: Jarkka tekee ensimmäisen siirron. Tämän jälkeen ylläpitäjä ja Jarkka siirtävät vuorotellen. Ensimmäisellä siirrollaan Jarkka valitsee jonkin koneista ja hakkeroi sen (esimerkiksi hyödyntämällä jotain järjestelmän aukkoa). Ensimmäisellä siirrollaan ylläpitäjä valitsee jonkin hakkeroimattoman koneen ja suojaa sen (esimerkiksi asentamalla uusimmat turvapäivitykset). Kaikilla seuraavilla siirroillaan Jarkka joko (a) ei tee mitään tai (b) valitsee jonkin koneen, jota ei ole hakkeroitu eikä suojattu ja joka on jonkin hakkeroidun koneen vieressä, ja hakkeroi sen. Kaikilla seuraavilla siirroillaan ylläpitäjä joko (a) ei tee mitään tai (b) valitsee jonkin koneen, jota ei ole hakkeroitu eikä suojattu ja joka on jonkin suojatun koneen vieressä, ja suojaa sen. Kamppailu päättyy, kun kumpikaan pelaaja ei tee mitään peräkkäisillä siirroilla. Kamppailun alussa mikään tietokone ei ole hakkeroitu eikä suojattu. Jokaisella koneella i on tietty arvo v i, joka kuvaa siihen tallennetun tiedon arvoa. Jokaisesta hakkeroidusta koneesta i Jarkka saa v i pistettä. Jarkka on varsin hyvä hakkeri, mutta hän ei tunne algoritmiikkaa. Tämän vuoksi hän pyytää sinua laatimaan ohjelman, joka laskee suurimman mahdollisen saavutettavissa olevan pistemäärän olettaen, että ylläpitäjä toimii optimaalisesti. Syöte Syötteen ensimmäisellä rivillä on positiivinen kokonaisluku n (n 2): tietokoneiden määrä. Toisella rivillä on n kokonaislukua v 1, v 2,..., v n (1 v i 2000). Luku v i kertoo koneessa i olevan tiedon arvon. Tuloste Ohjelmasi tulee tulostaa yksi rivi, jossa on yksi kokonaisluku: Jarkan suurin mahdollinen pistemäärä optimaalisesti toimivaa ylläpitäjää vastaan. Esimerkit 4 7 6 8 4 5 1 1 1 1 1 13 3 v. 3.20 Hakkeri 1/2

Esimerkkien selitys: Ensimäisessä esimerkissä Jarkan tulee hakkeroida ensin kone 2 (pisteitä tulee 6). Ylläpitäjä vastaa suojaamalla koneen 3. Seuraavaksi Jarkka voi hakkeroida koneen 1 (pisteitä tulee 7). Lopuksi ylläpitäjä suojaa koneen 4. Arvostelu Osatehtävä Rajat Pisteet 1 n 300 20 2 n 5000 20 3 n 500 000, koneen 1 hakkerointi on optimaalista Jarkan alkusiirtona 20 4 n 500 000 40 v. 3.20 Hakkeri 2/2

Tehtävä: TUG Köydenveto finnish BOI 2015, päivä 2. Muistiraja: 256 MB. 1.05.2015 Köydenveto on hyvin suosittu laji Bittimaassa. Säännöt ovat helpot: kaksi joukkuetta vetää köyttä vastakkaisiin suuntiin. Bittimaan vuotuinen hyväntekeväisyysottelu on alkamassa, ja paljon kilpailijoita on ilmoittautunut mukaan. Tehtäväsi on toimia erotuomarina ja jakaa kilpailijat kahteen joukkueeseen siten, että ottelu jatkuu kauan. Ilmoittautuneita kilpailijoita on yhteensä 2n, joten molemmissa joukkueissa tulee olemaan n kilpailijaa. Köydessä on n vetopaikkaa vasemmalla puolella ja n vetopaikkaa oikealla puolella. Bittimaan köydenvetoeliitti on varsin valikoivaa: kullakin kilpailijalla on tarkalleen yksi vetopaikka vasemmalla puolella köyttä ja yksi vetopaikka oikealla puolella, joihin hän suostuu menemään. Lisäksi tiedät kunkin osallistujan vahvuuden. Kilpailun järjestäjä kysyy nyt sinulta seuraavaa: Kun valitaan kokonaisluku k, onko mahdollista luoda kaksi joukkuetta niin, että molemmissa joukkueissa on n kilpailijaa, jokainen saa haluamansa vetopaikan (tietenkään kaksi kilpailijaa ei voi olla samassa paikassa) ja joukkueiden vahvuuksien summien ero on enintään k? Syöte Syötteen ensimmäisellä rivillä on positiivinen kokonaisluku n, vetopaikkojen määrä köyden kummallakin puolella, sekä kokonaisluku k 20n, suurin ero joukkueiden vahvuuksien välillä. Yksinkertaisuuden vuoksi osallistujat on numeroitu 1... 2n. Seuraavat 2n riviä kuvaavat yhden kilpailijan: rivillä i on kolme positiivista kokonaislukua l i, r i ja s i (1 l i, r i n, 1 s i 20). Tämä tarkoittaa, että kilpailijan i vahvuus on s i ja hän haluaa joko vetopaikan l i köyden vasemmalla puolella tai vetopaikan r i köyden oikealla puolella. Tuloste Ohjelmasi tulee tulostaa ainoalle riville joko tai NO riippuen siitä, onko mahdollista luoda kaksi joukkuetta, jotka toteuttavat yllä kuvatut vaatimukset. Esimerkit 4 1 1 1 1 2 1 2 2 2 8 1 2 2 3 3 5 3 3 2 4 4 1 4 4 2 v. 3.00 Köydenveto 1/2

2 5 1 1 1 1 2 4 2 2 1 2 1 4 NO Esimerkkien selitys: Ensimmäisessä esimerkissä sijoitamme osallistujat 1, 3, 6 ja 7 vasemmalle puolelle (tuloksena vahvuus 1+8+2+1 = 12) ja osallistujat 2, 4, 5 ja 8 oikealle puolelle (tuloksena vahvuus 2+2+5+2 = 11). Joukkueiden vahvuuksien erona on 1. Toisessa esimerkissä kummankin vahvuuden 4 osallistujan täytyy olla samassa joukkueessa, joten pienin vahvuuksien ero on 6. Arvostelu Osatehtävä Rajat Pisteet 1 n 10 18 2 n 2000 30 3 n 30 000, s i = 1 23 4 n 30 000 29 v. 3.00 Köydenveto 2/2