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