Oppgave: BOW Bowling. Regler for Bowling. norwegian. BOI 2015, dag 1. Tilgjengelig minne: 256 MB. 30.04.2015



Like dokumenter
Oppgave: FIL File Paths

INF109 - Uke 1b

Mattespill Nybegynner Python PDF

TRINN 1: HVA ER ET SET?


TDT4165 PROGRAMMING LANGUAGES. Exercise 02 Togvogn-skifting

Installasjonsveiledning DDS-CAD 7.3

Dersom spillerne ønsker å notere underveis: penn og papir til hver spiller.

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

Stigespill. Input. Output. Oppgave: Stigespill Oppgavenr.: 1. Norsk Informatikk Olympiade 2. runde 2014/2015

Tannhjul. Input. Output. Norsk Informatikk Olympiade 2. runde 2015/2016. Oppgavenr.: 1

Crosswords and More. Av LäraMera Program AB og Leripa AB. Kristina Grundström, illustratør Richard Hultgren, programmerer

SQUARE Systemspill for online spill på hest Brukerveiledning

Installasjonsveiledning. DDS-CAD ByggMester

Kapittel 3: Litt om representasjon av tall

Allment. Poengserie er en funksjon du finner i Ruter for å slå sammen resultatet i flere turneringer. Det kan eksempelvis dreie seg om:

Generell brukerveiledning for Elevportalen

10.4 Sannsynligheter ved flere i utvalget (kombinatorikk)

Tall Vi på vindusrekka

Moro med regning trinn 90 minutter

Straffespark Introduksjon Scratch Lærerveiledning

Installasjonsveiledning. DDS-CAD Arkitekt & Konstruksjon 7

ADDISJON FRA A TIL Å

Forenklet bridge (f-bridge)

Norsk informatikkolympiade runde

Klargjør for dashbord i it s learning

BRUKERMANUAL FOR PDA HP ipaq 614C

MAT1030 Forelesning 3

GJENNOMGANG LES BARE OM DERE VIL HA LØSNINGEN!

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

Kapittel 3: Litt om representasjon av tall

Opus Systemer AS 2013

NÆROSET IDRETTSLAG. Organisasjonsnummer:

Drosjesentralen. I-120: Obligatorisk oppgave 2, 2000

Elevene skal bygge en mekanisk målskårer etter veiledningen i LEGO WeDo -programvaren. De skal skyte på en papirball med den mekanisk målskåreren.

Mac OS X 10.6 Snow Leopard Installerings- og klargjøringshåndbok

En enkel innføring i croquet. Hagecroquet («Garden Croquet»)

Hvor i All Verden? Del 3 Erfaren Scratch PDF

BlindShell bruksanvisning

Import av varer fra Excel

Teori og oppgaver om 2-komplement

Sprettende ball Introduksjon Processing PDF

MAT1030 Diskret Matematikk

I tillegg trengs 2 terninger.

360 Mine OneNote bøker. Brukerhåndbok

Viktig informasjon ang. lagringsområder

OFFENTLIG-NØKKELKRYPTOGRAFI

Komme i gang med Skoleportalen

Kanter, kanter, mange mangekanter

Pizzatur. Input. Output. Begrensninger. Norsk Informatikk Olympiade Runde /2019. Oppgavenr.: 1

Utførelse av programmer, metoder og synlighet av variabler i JSP

INSPERA - brukerveiledning for student skoleeksamen

Hvordan å lage og publisere ditt personlige visittkort

TDT4110 IT Grunnkurs Høst 2014

Del 1: Overgang fra gammel hjemmeside til ny hjemmeside

Hefte med problemløsningsoppgaver. Ukas nøtt 2009/2010

I denne oppgaven blir du introdusert for programmeringsspråket JavaScript. Du skal gjøre den klassiske oppgaven Hei verden, med en katt.

KONTROLLSTRUKTURER. MAT1030 Diskret matematikk. Kontrollstrukturer. Kontrollstrukturer. Eksempel (Ubegrenset while-løkke)

INF2270. Input / Output (I/O)

Forelesning 2. Flere pseudokoder. Representasjoner av tall. Dag Normann januar 2008 KONTROLLSTRUKTURER. Kontrollstrukturer. Kontrollstrukturer

oppgaver fra abels hjørne i dagbladet

Evaluering av grensesnitt. Slik vi ofte oppfatter systemet

TURNERINGSREGLEMENT NORSK SCRABBLEFORBUND

MAT1030 Diskret matematikk

Øvingsforelesning i Python (TDT4110)

Nokia Lifeblog 2.5 Nokia N76-1

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

MAT1030 Diskret matematikk

Regler for: Videregående. Det anbefales at man først ser på powerpoint-reglene når man skal lære seg ulike spill med kortstokkene!

Brukerveileding For PCK Lagerhåndtering (Med Trådløs Terminal)

TASTAVEDEN SKOLE Bruk av PC i skolen

MULTICOM 112. Muntlig innvirkning A1: Ingen krav

MAT1030 Diskret matematikk

Humanware Companion.

IN2010: Forelesning 11. Kombinatorisk søking Beregnbarhet og kompleksitet

Dette eksemplet forutsetter at du allerede har gjennomgått Kom i gang med tavler 1.

Skoleundersøkelse om mobbing

Øvingsforelesning TDT4105

Nytt i GK96 ved oppdatering til versjon. 2.0

Brukerdokumentasjon FrP «Min side»

N-dronningproblemet Obligatorisk oppgave 1 I120, H-2000

Niels Henrik Abels matematikkonkurranse

IN uke 1. Komme i gang med programmering

Heltallsdivisjon og rest div og mod

Sekventkalkyle for utsagnslogikk

BRUK AV GMAIL SOM KLUBBADRESSE

Sweex Powerline 200 Adapter

Humanware. Trekker Breeze versjon

Posisjonsystemet FRA A TIL Å

Brukerveiledning - secure.nhh.no og secure.privnett.nhh.no

Norsk informatikkolympiade runde. Sponset av. Uke 46, 2017

Forberedelser; De sidene vi nå skal lage har etternavnet.htm eller.html. HypertextMarkupLanguage

En liten oppskrift på hvordan jeg installert og fikk Xastir til å virke sånn at jeg ble synlig i APRS verden.

oppgaver fra abels hjørne i dagbladet

Internett-deling 2.0 Nokia N76-1

Samle alt. Familien din. Livet ditt. Alltid tilgjengelig.

F-Secure Mobile Security for S60

Brukerveiledning for Outlook Web App

Bud-guiden. Lykke til på jobb! Hilsen oss i Dørsalg. En god start på arbeidslivet!


Transkript:

Oppgave: BOW Bowling norwegian BOI 0, dag. Tilgjengelig minne: 6 MB. 30.04.0 Byteasar er glad i både bowling og statistikk. Han har skrevet ned resultatene sine fra noen av gangene han har spilt bowling. Desverre så har noen av tegnene han har skrevet ned blitt uklare og dermed uleselige. Byteasar ber deg om å skrive et program som kan beregne antall mulige distinkte spill som stemmer overens med notatene hans. Regler for Bowling En runde med bowling består av n ruter: n enkle ruter og en siste rute. I vanlig bowling så er n = 0. I starten av hver rute så blir 0 kjegler stillt oppreist i enden av en lang bane, og spilleren har opptill forsøk (kast) på å kaste en ball nedover banen for å velte så mange kjegler som mulig. (I noen tilfeller så vil spilleren ha 3 kast i siste rute. Se nedenfor.) Hver rute er beskrevet med (for enkle ruter) eller 3 (for den siste ruta) tegn. For hvert kast så får spilleren standardpoeng lik det totale antall kjegler han veltet på det kastet. Spillerens standardpoeng for hver rute er summen av standardpoengene for alle kast i den ruta. Dersom alle 0 kjeglene blir veltet i en enkel rute (slik at spilleren får 0 standard poeng for ruta) så vil spillenen få bonuspoeng. For en enkel rute så er reglene som følger: Dersom en spiller velter alle 0 kjeglene med sitt første kast for ruta så får han en strike og ruta avsluttes. Som bonuspoeng så får han summen av antall standardpoeng med sine neste to kast. En strike markeres med x-. Dersom en spiller bruker begge kastene sine for ruta på å velte alle 0 kjeglene, så får han en spare. Som bonuspoeng så får han standardpoengene for sitt neste kast. En spare markeres med A/, hvor A er et siffer som beskriver antall kjegler som ble veltet med det første kastet i ruta. Dersom 9 eller færre kjegler har blitt veltet etter at spilleren har gjort begge kastene sine så får spilleren bare standardpoeng og ruta markeres med AB, hvor A er antall kjegler veltet i det første kastet og B er antall kjegler veltet i det andre kastet. (A + B < 0). Merk at bonuspoengene er inkludert i poengsummen for den ruta hvor spilleren fikk enten en strike eller en spare, selv om verdien av bonusen avhenger av kast som blir gjort i senere ruter. I den siste ruta så er reglene som følger: Til å begynne med så har spilleren to kast i denne ruta. Dersom 9 eller færre kjegler blir veltet med disse to kastene så avsluttes ruta. Ellers (hvis de to første kastene er en spare eller det første kastet er en strike), får spilleren et tredje kast i ruta. Hvis spilleren velter ned alle kjeglene i ett av de tre kastene, så blir kjeglene satt tilbake til den initielle posisjonen før det neste kastet. Poengsummen for den siste ruta er det totale antall kjegler som blir veltet i den ruta (merk at det er ingen bonuspoeng for strike eller spare). Den siste ruta kan ha et av de følgende syv utfallene (hvor A og B er ensiffra tall): v. 3 Bowling /3 April 8 May 3, 0 www.boi0.mimuw.edu.pl

Markering Beskrivelse Rutepoeng xxx tre strikes etter hverandre 30 xxa to strikes, etterfulgt av et kast hvor A kjegler har blitt veltet 0 + A xa/ en strike etterfulgt av en spare, hvor A kjegler ble veltet i det første 0 kastet av sparen xab en strike etterfulgt av to kast, hvor henholdsvis A og B kjegler ble 0 + A + B veltet (A + B < 0) A/x en spare med A kjegler i første kast, etterfulgt av en strike 0 A/B en spare med A kjegler i første kast, etterfulgt av B kjegler veltet i 0 + B siste kast AB- to kast hvor henholdsvis A og B kjegler ble veltet (A + B < 0) A + B Hvert spill er beskrevet som en sekvens av n + tegn. På slutten av hvert spill så kan det totale antall poeng man fikk for hver rute beregnes. For eksempel, for et spill med n = 0 ruter beskrevet som 08x-7//x-x-344/0/x, så er spillerens poeng for hver ramme som følger: Input Ramme Markering Standardpoeng Bonuspoeng Rammepoeng Totalt 08 0 + 8 8 8 x- 0 7 + 3 0 8 3 7/ 7 + 3 40 4 / + 8 0 0 60 x- 0 0 + 8 6 x- 0 + 3 97 7 3 + 3 0 8 44 4 + 4 8 0 9 / + 9 0 0 0 final 0/x 0 + 0 + 0 0 40 Første line i input inneholder et heltall q ( q ), som betegner antall testsett i fila. De påfølgende 3q linjene beskriver testsettene. Hvert testsett er beskrevet med tre linjer. Den første linja i hvert testsett inneholder heltallet n ( n 0), som betegner antall ruter. Den neste linja inneholder en sekvens med n + tegn som beskriver spillet etter Byteasars notater. Uleselige tegn er erstattet med spørsmålstegn (? ). Den tredje linja inneholder n tall, det totale antall poeng etter hver rute. For hver rute så er enten alle sifrene lesbare, eller så er alle sifrene uleselige. Tall som er uleselige er erstattet med -. Output Programmet ditt skal skrive ut q linjer, én linje per testsett i samme rekkefølge som de er gitt i input. For hvert testsett skal programmet ditt skrive ut ett heltall: det totale antall forskjellige spill som tilsvarer testsettet. To spill regnes som forskjellige hvis og bare hvis de har en forskjell i minst ett av kastene, dvs. at den (n + )-tegns beskrivelsen av spillene er forskjellige. Du kan anta at hvert testsett har minst ett korrekt spill som stemmer overens med det. Du kan anta at du får plass til resultatet i en 64-bit signed integer. Eksempler v. 3 Bowling /3 April 8 May 3, 0 www.boi0.mimuw.edu.pl

0 08x-7//x?x-3??/??? 8-40 60 8 97 0 0 0 40 x-x-3?/00-37 4 9 0 Forklaring av eksemplene: I det første eksempelet, i ramme etter x en, så må neste tegn være -. I ramme 8 så fikk spilleren 8 poeng totalt. Det er dermed 9 muligheter for hvordan han kunne oppnå denne summen: 0 + 8, + 7,..., 8 + 0. Det ble ikke gitt noen bonus poeng i ramme 9. Derfor kan det ikke ha blitt gitt noen poeng for det første kastet i den siste ruta. For å få 0 poeng i den siste ruta så må spilleren dermed ha fått først en spare etterfulgt av en strike med det siste kastet. Det er dermed 9 forskjellige gyldige spill som stemmer overens med input data. I det andre testsettet så vil alle tegn fra 0 to 9 stemme overens med input data. Ekstra eksempeltester: I konkurransesystemet kan du finne ekstra eksempeltester med flere eksempeltester med n =. Grading Subtask Begrensninger (i hvert testsett Poeng det er maksimalt seks? tegn i input sekvensen 6 svaret er maksimalt 0 9 7 3 ingen spillbeskrivelse med noen av tegnene x eller / vil stemme overens med input 6 data 4 input sekvensen slutter med 00- (dvs. spilleren fikk 0 poeng i siste rute), og de siste 3 min(3, n) rute-poengsummene gitt i den tredje linjen av testsettene vil alle være - ingen begrensninger 8 v. 3 Bowling 3/3 April 8 May 3, 0 www.boi0.mimuw.edu.pl

Oppgave: EDI Editor norwegian BOI 0, dag. Tilgjengelig minne: MB. 30.04.0 Byteasar er en programmerer som jobber med et revolusjonerende program for teksteditering. I editeringsprogrammet er det to typer operasjoner: en for å redigere tekst, og den andre for angre tidligere operasjoner. En av de innovative funskjonene til editeringsprogrammet er en flernivå angreoperasjon. Den fungerer som følgende. Vi sier at redigeringsoperasjoner har nivå 0. En angreopersjon av nivå i (for i =,,...) angrer den siste operasjonen med nivå som på det meste er i og som ikke er angret. For eksempel, en operasjon med nivå kan bare angre redigeringsoperasjoner. En angreoperasjon med nivå kan angre redigeringsoperasjoner, samt angreoperasjoner med nivå (men ikke angreoperasjoner som har høyere nivå) Mer formelt, hver av de allerede utførte operasjonene kan være i en av to forskjellige tilstander: aktiv eller angret. La X være en av operasjonene. Rett etter å ha utført operasjonen X, så er den i tilstanden aktiv. Hvis X er en angreoperasjon med nivå i, så finner vi den nyligste operasjonen som er i tilstanden aktiv og som har nivå i eller lavere (betegn den med X ) og endrer tilstanden av operasjonen X til angret. Hvis X også er en angreoperasjon, må vi endre tilstanden til aktiv på operasjonen som X hadde angret (for eksempel X ). Vi fortsetter på samme måte: når tilstanden til en angreoperasjon X j som tidligere har angret en operasjon X j+ endres, må vi også endre tilstanden til operasjonen X j+ (som selsvagt kan resultere i endret tilstand på flere operasjoner). Hele kjeden med endringer blir stoppet når en redigeringsoperasjon blir nådd. For enkelhetens skyld, det nåværende innholdet av teksten i programmet vil være betegnet med et enkelt heltall s, kalt editortilstanden (er 0 på starten). Hver redigeringsoperasjon betegner editortilstanden den produserer. Editortilstanden avhenger av den siste redigeringsoperasjonen som er i aktiv tilstand. Hjelp Byteasar ved å skrive et program som holder styr på editortilstanden. La oss se dette i aksjon: den følgende tabellen viser noen operasjoner utført av Byteasar og editortilstanden etter å utført hver av dem. Symbolet E s betegner en redigeringsoperasjon som endrer på editortilstanden til s, og symbolet U i betegner en angreoperasjon med nivå i. Operasjon E E E U U U 3 E 4 U U U E Editortilstand 0 4 0 Først utfører Byteasar tre redigeringsoperasjoner. Editortilstanden ble endret fra 0 til, så til, og til slutt til. Deretter utførte han to angreoperasjoner med nivå, som angret operasjonene E og E (endret tilstanden på de til angret). Editeringstilstanden ble dermed satt tilbake til. Den neste angreoperasjonen med nivå 3 angret den forrige operasjonen U (endret tilstanden til angret), noe som igjen førte til at operasjonen E ble gjenopprettet (endret tilstand tilbake til aktiv). Som følge av dette ble editortilstanden igjen satt til. Operasjonen U angret operasjonen E 4, operasjonen U gjorde at E ble angret igjen, den siste U operasjonen angret operasjonen E, og den siste operasjonen er E. Input Den første linjen med input innholder et positivt heltall n, antall operasjoner utført av Byteasar. De neste n linjene innholder beskrivelser av operasjonene, en per linje, hver er et heltall a i ( n a i n, a i 0). Dersom a i > 0, så betegner den en redigeringsoperasjon som endrer redigeringstilstanden til a i. Hvis a i < 0, så blir det betegnet en angreoperasjon med nivå a i. Du kan anta at for hver angreoperasjon vil det være en aktiv operasjon med lavere nivå enn angreoperasjonen. v. 3 Editor / April 8 May 3, 0 www.boi0.mimuw.edu.pl

Output Programmet ditt skal skrive ut n linjer. Den i-ende linjen skal innholde et heltall som betegner redigeringstilstanden etter å utført de første i operasjonene fra inputten. Eksempler - - -3 4 - - - 4 0 Grading Subtask Begrensninger Poeng n 000 0 n 300 000 og kun operasjonene E i og U blir brukt 3 n 300 000 og kun siste tall i sekvensen trenger å stemme (men de første n 8 tallene må være heltall fra 0 til n) 4 n 300 000 37 v. 3 Editor / April 8 May 3, 0 www.boi0.mimuw.edu.pl

Oppgave: NET Network norwegian BOI 0, dag. Tilgjengelig minne: 6 MB. 30.04.0 Myndighetene i Byteland har bestemt at det er på tide å koble landet til Internett, slik at alle innbyggerne kan delta i programmeringkonkurranser og se på søte kattevideoer. Da de skulle bygge stamnettet i landet, ga de oppgaven med å koble sammen alle n datamaskinene i Byteland til firmaet Internett Optimistene Inc. Koblingene ble laget mellom par av datamaskiner på en slik måte at alle datamaskiner er koblet sammen med en sekvens av koblinger. Byteland er på ingen måter et rikt land. For å minimere kostnadene, så ble nettverket bygget med en trestruktur (det er altså nøyaktig n direkte koblinger mellom datamaskinene). Altfor sent innså man at dette medførte en stor ulempe. Hvis en av koblingene blir ødelagt, så vil nettverket bli delt og noen av datamaskinene vil ikke kunne kommunisere med hverandre. For å øke feiltoleransen til nettverket, så er det blitt bestemt at nettverket i hvertfall skal kunnne tolerere at én kobling kan bli ødelagt. Din oppgave er hjelpe Internett Optimistene Inc. med å forbedre nettverket på billigst mulig måte. Gitt nettverksstrukturen til Byteland (altså hvilke n par med datamaskiner som er koblet direkte sammen), finn det minste tallet med koblinger som man trenger å legge til slik at nettverket fortsatt er sammenkoblet dersom en av koblingene blir ødelagt. Input Den første linjen med input er et positiv heltall n (n 3), antallet datamaskiner i Byteland. For enkelhetens skyld er alle datamaskinene nummerert fra til n. Hver av de påfølgende n linjene innholder et par med heltall, a og b ( a, b n, a b) som betegner hvilke datamaskiner som er koblet direkte sammen. Output I den første linjen med output skal programmet ditt skrive et heltall k, det minste antallet med koblinger som må legges til nettverket. I de hver av de påfølgende k linjene skal programmet ditt skrive et par med heltall, a og b ( a, b n, a b) som betegner tallene til datamaskinene som skal kobles sammen. Koblingene kan skrives i hvilken som helst rekkefølge. Hvis det er mer enn en løsning, så kan programmet ditt skrive ut hvilken som helst av de. v. 3 Network / April 8 May 3, 0 www.boi0.mimuw.edu.pl

Eksempler 6 3 4 4 6 4 3 4 6 3 6 8 3 3 4 4 3 6 3 7 3 8 6 7 3 4 8 3 6 7 8 4 Grading Subtask Begrensninger Poeng n 0 8 n 000 4 3 n 00 000 37 v. 3 Network / April 8 May 3, 0 www.boi0.mimuw.edu.pl