Wykrywacz cząsteczek (Detecting Molecules)

Transkrypt

Wykrywacz cząsteczek (Detecting Molecules)
InternationalOlympiadinInformatics2016
12-19thAugust2016
Kazan,Russia
day1_1
molecules
Country:POL
Wykrywaczcząsteczek(DetectingMolecules)
Firma,wktórejpracujePetr,skonstruowałamaszynędowykrywaniacząsteczek.
Każdacząsteczkamamasęwyrażającąsiędodatniąliczbącałkowitą.Maszynama
określonyzakrespomiarowy [l, u] ,gdzie l i u sądodatnimiliczbamicałkowitymi.
Maszynamożewykryćzbiórcząsteczekwtedyitylkowtedy,gdyzbiórtenzawiera
podzbiór,któregołącznamasanależydozakresupomiarowegomaszyny.
Formalnie,rozważmy n cząsteczekomasach w0 , … , wn−1 .Proceswykrywania
kończysiępowodzeniem,jeśliistniejezbiórparamiróżnychindeksów I
takiże l ≤ wi1
+ … + wim ≤ u .
= i1 , … , im
Konstrukcjamaszynygwarantuje,żeróżnicamiędzy l i u jestniemniejszaniż
różnicamasnajcięższejinajlżejszejcząsteczki.Formalnie, u − l ≥ wmax
gdzie wmax
= max(w0 , … , wn−1 ) i wmin = min(w0 , … , wn−1 ) .
− wmin ,
Twoimzadaniemjestnapisanieprogramu,któryalbowyznaczyjakikolwiekpodzbiór
zbiorucząsteczek,któregołącznamasanależydozakresupomiarowegomaszyny,albo
stwierdzi,żetakipodzbiórnieistnieje.
Szczegółyimplementacji
Powinieneśnapisaćjednąfunkcję(metodę):
int[]s o lve (intl,intu,int[]w)
liu:końcezakresupomiarowego,
w:masycząsteczek.
Jeśliżądanypodzbióristnieje,funkcjapowinnazwrócićtablicęindeksów
cząsteczek,któretworządowolnytakipodzbiór.Jeślijestwięcejniżjedna
poprawnaodpowiedź,wynikiemfunkcjimożebyćdowolnaznich.
Jeśliżądanypodzbiórnieistnieje,funkcjapowinnazwrócićpustątablicę.
WjęzykuCsygnaturafunkcjijestminimalnieinna:
ints o lve (intl,intu,int[]w,intn,int[]re s ult)
n:liczbaelementówtablicyw(tj.liczbacząsteczek),
pozostałeparametrysątakiesamejakpowyżej.
Zamiastzwracaćtablicęopisującą m indeksów(jakpowyżej),funkcja
powinnazapisaćteindeksydopierwszych m komórektablicyre s ulti
zwrócić m .
Jeśliżądanypodzbiórnieistnieje,funkcjaniepowinnaniczegozapisywać
dotablicyre s ultipowinnazwrócić 0 .
1/3
Twójprogrammożezapisaćindeksydozwracanejtablicy(lubdotablicyre s ultw
przypadkujęzykaC)wdowolnejkolejności.
SzczegółyimplementacjiwTwoimjęzykuprogramowaniaznajdująsięw
dostarczonychplikachzszablonami.
Przykłady
Przykład1
s o lve (15,17,[6,8,8,7])
Wtymprzykładziemamyczterycząsteczkiomasach6,8,8i7.Maszynapotrafi
wykrywaćpodzbiorycząsteczekołącznejmasiemiędzy15a17włącznie.Zauważ,że
17 − 15 ≥ 8 − 6 .Łącznamasacząsteczek1i3to w1 + w3 = 8 + 7 = 15 ,takwięc
funkcjamożezwrócić[1,3].Innepoprawneodpowiedzito[1,2](
w1 + w2 = 8 + 8 = 16 )i[2,3]( w2 + w3 = 8 + 7 = 15 ).
Przykład2
s o lve (14,15,[5,5,6,6])
Wtymprzykładziemamyczterycząsteczkiomasach5,5,6i6iszukamypodzbioruo
łącznejmasiemiędzy14a15włącznie.Znów,zauważże 15 − 14 ≥ 6 − 5 .Wtym
przypadkuniemażadnegopodzbiorucząsteczekołącznejmasiemiędzy 14 a 15 ,
więcwynikiemfunkcjipowinnabyćpustatablica.
Przykład3
s o lve (10,20,[15,17,16,18])
Wtymprzykładziemamyczterycząsteczkiomasach15,17,16i18iszukamypodzbioru
ołącznejmasiemiędzy10a20włącznie.Znów,zauważże 20 − 10 ≥ 18 − 15 .Każdy
podzbiórjednoelementowymałącznąmasęmiędzy10a20,takwięcmożliwe
poprawnewynikito:[0],[1],[2]i[3].
Podzadania
1. (9punktów): 1 ≤ n
równe.
≤ 100 , 1 ≤ wi ≤ 100 , 1 ≤ u, l ≤ 1000 ,wszystkie wi są
2. (10punktów): 1 ≤ n
≤ 100 , 1 ≤ wi , u, l ≤ 1000 i
max(w0 , … , wn−1 ) − min(w0 , … , wn−1 ) ≤ 1 .
3. (12punktów): 1 ≤ n ≤ 100 i 1 ≤ wi , u, l ≤ 1000 .
4. (15punktów): 1 ≤ n ≤ 10 000 i 1 ≤ wi , u, l ≤ 10 000 .
5. (23punkty): 1 ≤ n ≤ 10 000 i 1 ≤ wi , u, l ≤ 500 000 .
6. (31punktów): 1 ≤ n ≤ 200 000 i 1 ≤ wi , u, l < 231 .
Przykładowyprogramsprawdzający
Przykładowyprogramsprawdzającywczytujedanewnastępującymformacie:
2/3
wiersz1:liczbycałkowite n , l , u .
wiersz2: n liczbcałkowitych: w0 , … , wn−1 .
3/3