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

Podobne dokumenty