Verven met getallen - International Olympiad in Informatics

advertisement
InternationalOlympiadinInformatics2016
12-19thAugust2016
Kazan,Russia
day2_1
paint
Country:NLD
Vervenmetgetallen
'Vervenmetgetallen'iseenbekendpuzzelspelletje.Webeschouweneensimpeleééndimensionaleversievandezepuzzel.Indezepuzzelwordtaandespelereenrijvan n
cellengegeven.Decellenzijngenummerdvan0totenmet n − 1 vanlinksnaar
rechts.Despelermoetiederecelzwartofwitverven.Wegebruiken‘X’omzwarte
cellenaantegevenen‘_’omwittecellenaantegeven.
Despelerkrijgteenreeks c = [c0 , … , ck−1 ] van k positieveintegersgegeven:de
hints.Hijmoetdecellenzovervendatdezwartecelleninderijprecies k blokken
vormenvanopeenvolgendecellen.Bovendienmoethetaantalzwartecelleninhet
i 'deblokvanlinks( 0 -based)gelijkzijnaan ci .Bijvoorbeeld,alsdehints c = [3, 4]
zijn,moetdeopgelostepuzzelpreciestweeblokkenvanopeenvolgendezwartecellen
hebben:eenvanlengte3gevolgddooreenvanlengte4.Dus,als n = 10 en
c = [3, 4] ,is“_XXX__XXXX”eenoplossingdievoldoetaandehints.Merkopdat
“XXXX_XXX__”nietvoldoetaandehints:deblokkenvanzwartecellenstaannietinde
juistevolgorde.Ookis“__XXXXXXX_”geengeldigeoplossing:eriseenenkelblokvan
zwartecellen,niettweeaparteblokken.
Jekrijgteengedeeltelijkopgeloste'Vervenmetgetallen'-puzzel.Ditbetekentdatje
n en c weet,enbovendienookweetdatsommigecellenzwartmoetenzijnen
sommigecellenwitmoetenzijn.Jouwtaakisomextrainformatieafteleidenoverde
cellen.
Meerspecifiek,eengeldigeoplossingiserééndiezowelaandehintsvoldoetalsaan
degegevencellen.Jeprogrammamoetcellenvindendiezwartgeverfdzijninelke
geldigeoplossingencellendiewitgeverfdzijninelkegeldigeoplossing.Jemag
aannemendatdeinvoerzodanigisdaterminstensééngeldigeoplossingbestaat.
Implementatiedetails
Implementeerdevolgendefunctie(methode):
stringsolve_puzzle(strings,int[]c).
s:stringvanlengte n .Voorelke i ( 0 ≤ i ≤
karakteris:
‘X’,alscel i zwartmoetzijn,
‘_’,alscel i witmoetzijn,
‘.’,alsergeeninformatieisovercel i .
n − 1 )geldtdathet i -e
c:arrayvanlengte k diedehintsbevat,zoalshierbovengedefinieerd,
defunctiemoeteenstringvanlengte n teruggeven.Voorelke i (
0 ≤ i ≤ n − 1 )moethet i -dekaraktervandeuitvoerstringgelijkzijn
aan:
i
1/3
‘X’,alscel i zwartisinelkegeldigeoplossing,
‘_’,alscel i witisinelkegeldigeoplossing,
‘?’,anders(ditbetekent:alsertweegeldigeoplossingenbestaanzo
datcel i zwartisindeeneoplossingenwitindeandereoplossing).
IndetaalCisdefunctiesignatureeenandere:
voidsolve_puzzle(intn,char*s,intk,int*c,char*result)
n:lengtevandestrings(aantalcellen),
k:lengtevandearrayc(aantalhints),
deandereparameterszijnhetzelfdealshierboven,
Indeplaatsvaneenstringvan n charactersterugtegeven,moetde
functiehetantwoordschrijvennaardestringresult.
DeASCIIcodesvandecharactersgebruiktinditprobleemzijn:
'X':88,
'_':95,
'.':46,
'?':63.
Bekijkdeaangeleverdetemplatebestandenvoorimplementatiedetailsinjouw
programmeertaal.
Voorbeelden
Voorbeeld1
solve_puzzle("..........",[3,4])
Ditzijnallemogelijkegeldigeoplossingenvandepuzzel:
“XXX_XXXX__”,
“XXX__XXXX_”,
“XXX___XXXX”,
“_XXX_XXXX_”,
“_XXX__XXXX”,
“__XXX_XXXX”.
Jezietdatdecellenmet(0-based)indices2,6,en7zwartzijninelkegeldige
oplossing.Elkeanderecelkan,maarhoeftniet,zwartzijn.Dus,hetjuisteantwoordis
“??X???XX??”.
Voorbeeld2
solve_puzzle("........",[3,4])
Inditvoorbeeldisdeheleoplossinguniekbepaaldenhetjuisteantwoordis
“XXX_XXXX”.
Voorbeeld3
solve_puzzle("..._._....",[3])
Inditvoorbeeldkunnenweafleidendatcel4ookwitmoetzijn—erisgeenmanier
2/3
omdrieopeenvolgendezwartecellenteplaatsentussendewittecellenopindices3
en5.Dus,hetjuisteantwoordis“???___????”.
Voorbeeld4
solve_puzzle(".X........",[3])
Erzijnslechtstweegeldigeoplossingendieovereenkomenmetbovenstaande
beschrijving:
“XXX_______”,
“_XXX______”.
Dus,hetjuisteantwoordis“?XX?______”.
Subtaken
Inallesubtakengeldt 1 ≤ k ≤ n ,en 1 ≤ ci ≤ n vooralle 0 ≤ i ≤ k − 1 .
1. (7punten) n ≤ 20 , k = 1 , s bevatenkel‘.’(legepuzzel),
2. (3punten) n ≤ 20 , s bevatenkel‘.’,
3. (22punten) n ≤ 100 , s bevatenkel‘.’,
4. (27punten) n ≤ 100 , s bevatenkel‘.’en‘_’(alleeninformatieoverwitte
cellen),
5. (21punten) n ≤ 100 ,
6. (10punten) n ≤ 5 000 , k ≤ 100 ,
7. (10punten) n ≤ 200 000 , k ≤ 100 .
Voorbeeldgrader
Devoorbeeldgraderleestdeinvoerinhetvolgendeformaat:
regel1:string s ,
regel2:integer k gevolgddoor k integers c0 , … , ck−1 .
3/3
Download