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