Gondole (Gondola) - International Olympiad in Informatics

Transkrypt

Gondole (Gondola) - International Olympiad in Informatics
InternationalOlympiadinInformatics2014
13-20thJuly2014
Taipei,Taiwan
gondola
Day-2tasks
Language:pl-PL
Gondole(Gondola)
GondoleMao-KongnależądonajpopularniejszychatrakcjiTaipei.Tensystemgondoliskładasięz
zamkniętejwpierścieńszyny,pojedynczejstacjioraz gondoli,ponumerowanychkolejnood1do ,
któreporuszająsięwkółkoposzyniewustalonymkierunku.Potym,jakgondola przejedzieprzez
stację,kolejnągondoląnastacjijestgondola
,jeśli
,orazgondola1,jeśli
.
Gondolemogąsięjednakpsuć.Szczęśliwiedostępnajestnieograniczonaliczbazapasowychgondoli,
ponumerowanychkolejno
,
,itd.Gdygondolazepsujesię,zostajeonazastąpiona
(dokładniewtymsamymmiejscuszyny)przezpierwsządostępnągondolęzapasową,tj.gondolę
zapasowąonajmniejszymdostępnymnumerze.Przykładowo,jeśliwsystemiejestpięćgondolii
gondola1popsujesię,zostanieonazastąpionagondolą6.
Uwielbiaszspędzaćczas,stojącnastacjiioglądająckolejnoprzejeżdżająceprzezniągondole.
Ciągiemgondolowymnazywamysekwencję numerówgondoli,któreprzejeżdżająkolejnoprzez
stację.Mogłosięzdarzyć,żeprzedTwoimprzyjazdemniektóregondolezepsułysię(izostały
zastąpioneprzezgondolezapasowe),jednakżadnagondolaniepsujesię,podczasgdyprzebywaszi
obserwujeszjenastacji.
Zauważ,żewzależnościodtego,któragondolajakopierwszawjeżdżanastację,tasamakolejność
gondolinaszyniemożedaćróżneciągigondolowe.Dlaprzykładu,jeśliżadnagondolajeszczesięnie
popsuła,zarówno(2,3,4,5,1),jaki(4,5,1,2,3)sąmożliwymiciągamigondolowymi,natomiast(4,3,
2,5,1)niemożebyćtakimciągiem(ponieważgondolewystępująwzłejkolejności).
Jeśligondola1popsujesię,jakociąggondolowymożemyzaobserwowaćm.in.ciąg(4,5,6,2,3).Jeśli
jakokolejnapopsujesięgondola4,zostanieonazastąpionaprzezgondolę7,comożeprowadzićdo
ciągugondolowego(6,2,3,7,5).Jeślidalejpopsujesięgondola7,zastąpijągondola8,akońcowym
ciągiemgondolowymmożebyćnp.(3,8,5,6,2).
popsutagondola
1
4
7
nowagondola
6
7
8
możliwyciąggondolowy
(4,5,6,2,3)
(6,2,3,7,5)
(3,8,5,6,2)
Ciągiemzastąpieńnazywamyciągnumerówkolejnychgondol,któreuległypopsuciu.Ciągiem
zastąpieńdlapowyższegoprzykładubędziewięc(1,4,7).Powiemy,żeciągzastąpień prowadzido
ciągugondolowego ,jeślipotym,jakpopsująsiękolejnogondolewymienionewciągu ,możemy
zaobserwowaćciąggondolowy .
Sprawdzaniegondolowościciągu
WtrzechpierwszychpodzadaniachTwójprogrampowiniensprawdzić,czydanyciągmożebyć
ciągiemgondolowym.Wponiższejtabeliznajdująsięprzykładyciągówgondolowychoraztakich,które
1/4
niemogąbyćciągamigondolowymi.Napiszfunkcjęvalid.
valid(n,inputSeq)
n:długośćciągu.
inputSeq:tablicarozmiaru ;inputSeq[i]to -tyelementciągu,dla
.
Wynikiemfunkcjipowinnobyć1,jeślidanyciągjestciągiemgondolowym,a0w
przeciwnymprzypadku.
Podzadania1,2,3
podzadanie liczbapunktów
inputSeq
1
5
każdaliczbaod1do występujedokładnieraz
2
5
inputSeq[i]
3
10
inputSeq[i]
Przykłady
podzadanie
1
1
1
1
2
3
3
inputSeq
(1,2,3,4,5,6,7)
(3,4,5,6,1,2)
(1,5,3,4,2,7,6)
(4,3,2,1)
(1,2,3,4,5,6,5)
(2,3,4,9,6,7,1)
(10,4,3,11,12)
wynikfunkcji
1
1
0
0
0
1
0
uwagi
1niemożewystąpićtużprzed5
4niemożewystąpićtużprzed3
dwiegondoleonumerze5
ciągzastąpieńto(5,8)
4niemożewystąpićtużprzed3
Wyznaczanieciąguzastąpień
WtrzechkolejnychpodzadaniachTwójprogrampowinienodtworzyćprzykładowyciągzastąpień,
któryprowadzidozadanegociągugondolowego.Jeśliistniejewielemożliwychciągówzastąpień,
możeszwybraćdowolnyznich.Napiszfunkcjęreplacement.
replacement(n,gondolaSeq,replacementSeq)
n:długośćciągugondolowego.
gondolaSeq:tablicarozmiaru ;jestzagwarantowane,żegondolaSeqtociąg
gondolowy,agondolaSeq[i]to -tyelementtegociągu,dla
.
Wynikiemfunkcjipowinnobyć ,tojestdługośćciąguzastąpień.
2/4
replacementSeq:tablicawystarczającodużanato,byprzechowaćcałyciągzastąpień;
funkcjapowinnaumieścić -tyelementciąguzastąpieńwpolureplacementSeq[i],dla
.
Podzadania4,5,6
podzadanie liczbapunktów
gondolaSeq
4
5
gondolaSeq[i]
5
10
gondolaSeq[i]
6
20
gondolaSeq[i]
Przykłady
podzadanie
4
4
5
gondolaSeq
wynikfunkcji replacementSeq
(3,1,4)
1
(5,1,2,3,4)
0
(2,3,4,9,6,7,1) 2
(2)
()
(5,8)
Zliczanieciągówzastąpień
WczterechostatnichpodzadaniachTwójprogrampowinienwyznaczyćliczbęróżnychciągów
zastąpień,któreprowadządopodanegociągu(którymożebyćlubniebyćciągiemgondolowym),
modulo1,000,000,009.NapiszfunkcjęcountReplacement.
countReplacement(n,inputSeq)
n:długośćciągu.
inputSeq:tablicarozmiaru ;inputSeq[i]to -tyelementciągu,dla
.
Jeślidanyciągjestciągiemgondolowym,funkcjapowinnawyznaczyćliczbęciągów
zastąpień,któreprowadządotegociągugondolowego(któramożebyćogromniasta),i
podaćwwynikutęliczbęmodulo1,000,000,009.Jeślidanyciągniejestciągiem
gondolowym,wynikiemfunkcjipowinnobyć0.Jeślidanyciągjestciągiemgondolowym
odpowiadającymsytuacji,żeżadnagondolaniepopsułasię,wynikiemfunkcjipowinnobyć
1.
Podzadania7,8,9,10
podzadanie
liczba
punktów
7
5
8
15
inputSeq
inputSeq[i]
inputSeq[i]
iconajmniej
gondoli
niepopsułosię.
spośród
3/4
podzadanie
liczba
punktów
inputSeq
9
15
inputSeq[i]
10
10
inputSeq[i]
Przykłady
podzadanie
inputSeq
wynikfunkcji
ciągzastąpień
7
8
(1,2,7,6)
2
(2,3,4,12,6,7,1) 1
(3,4,5)lub(4,5,3)
(5,8,9,10,11)
9
(4,7,4,7)
0
10
(3,4)
2
inputSeqniejestciągiemgondolowym
(1,2)lub(2,1)
Implementacja
Powinieneśzgłosićdokładniejedenplikonazwiegondola.c,gondola.cpplubgondola.pas.W
tymplikupowinnaznaleźćsięimplementacjawszystkichtrzechfunkcjiopisanychpowyżej(nawetjeśli
planujeszrozwiązaćtylkoniektórepodzadania),onastępującychsygnaturach.Wprzypadkuprogramu
wC/C++powinieneśtakżezałączyć(include)pliknagłówkowygondola.h.
ProgramywC/C++
intvalid(intn,intinputSeq[]);
intreplacement(intn,intgondolaSeq[],intreplacementSeq[]);
intcountReplacement(intn,intinputSeq[]);
ProgramywPascalu
functionvalid(n:longint;inputSeq:arrayoflongint):integer;
functionreplacement(n:longint;gondolaSeq:arrayoflongint;
varreplacementSeq:arrayoflongint):longint;
functioncountReplacement(n:longint;inputSeq:arrayoflongint):
longint;
Przykładowyprogramsprawdzający
Przykładowyprogramsprawdzającywczytujedanewnastępującymformacie:
wiersz1:T,numerpodzadania,któreTwójprogrammarozwiązać(
).
wiersz2:n,długośćciąguwejściowego.
wiersz3:JeśliTjestrówne4,5lub6,wiersztenzawieragondolaSeq[0],...,
gondolaSeq[n-1].WprzeciwnymraziewiersztenzawierainputSeq[0],...,
inputSeq[n-1].
4/4

Podobne dokumenty