Obrazek logiczny (Paint By Numbers)
Transkrypt
Obrazek logiczny (Paint By Numbers)
InternationalOlympiadinInformatics2016 12-19thAugust2016 Kazan,Russia paint day2_1 Country:POL Obrazeklogiczny(PaintByNumbers) Obrazkilogicznetoznanytypłamigłówki.Wtymzadaniurozważamyjejprostą, jednowymiarowąwersję.Rozwiązującymaprzedsobąrząd n pól.Polatesą ponumerowaneod0do n − 1 odlewejdoprawej.Zadaniemrozwiązującegojest pokolorowaćpolanabiałoiczarno.Czarnepolaoznaczamyjako‘X’,abiałejako‘_’. Rozwiązującymazadanyciąg c = [c0 , … , ck−1 ] złożonyz k dodatnichliczb całkowitych,którynazywamywskazówką.Jegozadaniemjestpokolorowaćpolawtaki sposób,abyczarnepolatworzyłydokładnie k blokówkolejnychpól.Ponadtoliczba czarnychpólw i -tymblokuodlewej(blokinumerujemyod 0 )musibyćrówna ci . Przykładowo,jeśliwskazówkato c = [3, 4] ,torozwiązaniełamigłówkimusizawierać dwablokiczarnychpól:jedenodługości3idalejdrugiodługości4.Takwięcjeśli n = 10 i c = [3, 4] ,jednymzrozwiązańspełniającychwymaganiawskazówkijest “_XXX__XXXX”.Zauważmy,że“XXXX_XXX__”niespełniawymagańwskazówki,jakoże blokiczarnychpólznajdująsięwzłejkolejności.Także“__XXXXXXX_”niespełnia wymagańwskazówki,gdyżzawieratylkojedenblokczarnychpól,aniedwaosobne. Maszdanyczęścioworozwiązanyobrazeklogiczny,tzn.znasz n i c iwiesz,że niektórepolamusząbyćczarne,aniektórebiałe.Twoimzadaniemjestwydedukować coświęcejnatematpól. Mianowicie,przezpoprawnerozwiązanierozumiemyrozwiązaniespełniające wymaganiawskazówki,któreponadtospełniawymaganiadotycząceznanychkolorów pól.Twójprogrampowinienstwierdzić,którepolawdowolnympoprawnym rozwiązaniubędąpokolorowanenaczarnoiktórepolawdowolnympoprawnym rozwiązaniubędąbiałe. Możeszzałożyć,żewejściejestdobranewtakisposób,żeistniejeconajmniejjedno poprawnerozwiązanie. Szczegółyimplementacji Powinieneśnapisaćjednąfunkcję(metodę): stringsolve_puzzle(strings,int[]c). s:napisodługości n .Dlakażdego i ( 0 ≤ i ‘X’,jeślipole i musibyćczarne, ‘_’,jeślipole i musibyćbiałe, ‘.’,jeślinicniewiadomoopolu i . ≤ n − 1 ),znak i to: c:tablicarozmiaru k zawierającawskazówkę,zdefiniowanapowyżej. Funkcjapowinnazwrócićnapisdługości n .Dlakażdego i ( 0 ≤ i ≤ n − 1 ),znak i wynikowegonapisupowinienbyćrówny: i 1/3 ‘X’,jeślipole i jestczarnewkażdympoprawnymrozwiązaniu, ‘_’,jeślipole i jestbiałewkażdympoprawnymrozwiązaniu, ‘?’,wprzeciwnymprzypadku(tzn.jeśliistniejądwapoprawne rozwiązania,takieżewpierwszymznichpole i jestczarne,aw drugimbiałe). WjęzykuCsygnaturafunkcjijestminimalnieinna: voidsolve_puzzle(intn,char*s,intk,int*c,char*result) n:długośćnapisus(liczbapól), k:rozmiartablicyc(długośćwskazówki), pozostałeparametrysątakiesamejakpowyżej, zamiastzwracaćnapiszłożonyz n znaków,funkcjapowinnagozapisaćdo napisuresult. KodyASCIIznakówwystępującychwtymzadaniuto: ‘X’:88, ‘_’:95, ‘.’:46, ‘?’:63. SzczegółyimplementacjiwTwoimjęzykuprogramowaniaznajdująsięw dostarczonychplikachzszablonami. Przykłady Przykład1 solve_puzzle("..........",[3,4]) Otowszystkiepoprawnerozwiązaniałamigłówki: “XXX_XXXX__”, “XXX__XXXX_”, “XXX___XXXX”, “_XXX_XXXX_”, “_XXX__XXXX”, “__XXX_XXXX”. Możnazauważyć,żepolaoindeksach(numerowanychod0)2,6i7wkażdym poprawnymrozwiązaniusączarne.Każdeinnepolemoże,aleniemusibyćczarne. Poprawnąodpowiedziąjestzatem“??X???XX??”. Przykład2 solve_puzzle("........",[3,4]) Wtymprzykładziecałerozwiązaniejestwyznaczonejednoznacznieipoprawną odpowiedziąjest“XXX_XXXX”. Przykład3 solve_puzzle("..._._....",[3]) 2/3 Wtymprzykładziemożemywywnioskować,żepoleoindeksie4musibyćbiałe-nie mamożliwościpokolorowaniatrzechkolejnychpólnaczarnopomiędzybiałymipolami oindeksach3i5.Zatempoprawnąodpowiedziąjest“???___????”. Przykład4 solve_puzzle(".X........",[3]) Mamyjedniedwapoprawnerozwiązaniaspełniającepowyższyopis: “XXX_______”, “_XXX______”. Takwięcpoprawnąodpowiedziąjest“?XX?______”. Podzadania Wewszystkichpodzadaniach 1 ≤ k ≤ n oraz 1 ≤ ci ≤ n dlakażdego 0 ≤ i ≤ k− 1. 1. (7punktów) n ≤ 20 , k = 1 , s zawierajedynie‘.’(pustałamigłówka), 2. (3punkty) n ≤ 20 , s zawierajedynie‘.’, 3. (22punkty) n ≤ 100 , s zawierajedynie‘.’, 4. (27punktów) n ≤ 100 , s zawierajedynie‘.’oraz‘_’(sątojedynieinformacjeo białychpolach), 5. (21punktów) n ≤ 100 , 6. (10punktów) n ≤ 5 000 , k ≤ 100 , 7. (10punktów) n ≤ 200 000 , k ≤ 100 . Przykładowyprogramsprawdzający Przykładowyprogramsprawdzającywczytujedanewnastępującymformacie: wiersz1:napis s , wiersz2:liczba k ,poktórejnastępuje k liczbcałkowitych c0 , … , ck−1 . 3/3