Wakacje (Holiday) - International Olympiad in Informatics
Transkrypt
Wakacje (Holiday) - International Olympiad in Informatics
InternationalOlympiadinInformatics2014 13-20thJuly2014 Taipei,Taiwan holiday Day-2tasks Language:pl-PL Wakacje(Holiday) Jian-JiaplanujespędzićswojenastępnewakacjenaTajwanie.Podczaswakacjibędziepodróżowałod miastadomiasta,starającsięzwiedzićjaknajwięcejatrakcjiwróżnychmiastach. NaTajwanieznajdujesię miastusytuowanychwzdłużjednejautostrady.Miastasąponumerowane kolejnood0do .Dlamiasta ,gdzie ,sąsiednimimiastamisą oraz . Jedynymsąsiednimmiastemdlamiasta0jestmiasto1,ajedynymsąsiednimmiastemdlamiasta jestmiasto . Wkażdymmieścieznajdujesiępewnaliczbaatrakcji.Jian-Jiamadodyspozycji dniwakacjiichce wtymczasiezobaczyćmożliwienajwięcejatrakcji.Jużzdecydował,odktóregomiastarozpocznie zwiedzanieTajwanu.KażdegodniapodczasswoichwakacjiJian-Jiamożealboprzemieścićsiędo sąsiedniegomiasta,albozobaczyćwszystkieatrakcjewmieście,wktórymsięaktualnieznajduje. Jednegodnianiemożejednocześniezwiedzaćmiastaiprzemieszczaćsięmiędzymiastami.Jian-Jia nigdynieoglądaatrakcjiwtymsamymmieściedwukrotnie,nawetjeśliznajdziesiętamwielerazy. PomóżJian-Jiazaplanowaćwakacjetak,żebyzobaczyłmożliwienajwięcejróżnychatrakcji. Przykład Załóżmy,żeJian-Jiama7dniwakacji,dozwiedzeniajest5miast(wymienionychwtabeliponiżej),a zwiedzanierozpoczynasięodmiastaonumerze2.PierwszegodniaJian-Jiaodwiedza20atrakcjiw mieście2.DrugiegodniaJian-Jiaprzemieszczasięzmiasta2domiasta3,atrzeciegodniazwiedza wszystkie30atrakcjiwtymmieście.NastępnetrzydniJian-Jiaspędza,podróżujączmiasta3do miasta0.SiódmegodniaJian-Jiazwiedza10atrakcjiwmieście0.Łącznaliczbaatrakcji odwiedzonychprzezJian-Jiawynosi20+30+10=60,cojestnajwiększąmożliwąliczbąatrakcji,jakie Jian-Jiamożeodwiedzićwciągu7dni,rozpoczynajączwiedzanieodmiasta2. miasto 0 1 2 3 4 liczbaatrakcji 10 2 20 30 1 dzień akcja 1 zwiedzaatrakcjewmieście2 2 przemieszczasięzmiasta2domiasta3 1/3 dzień 3 4 5 6 7 akcja zwiedzaatrakcjewmieście3 przemieszczasięzmiasta3domiasta2 przemieszczasięzmiasta2domiasta1 przemieszczasięzmiasta1domiasta0 zwiedzaatrakcjewmieście0 Zadanie NapiszfunkcjęfindMaxAttraction,któraobliczymaksymalnąliczbęatrakcjimożliwądo odwiedzeniaprzezJian-Jia. findMaxAttraction(n,start,d,attraction) n:liczbamiast. start:indeksmiasta,zktóregorozpoczynasięzwiedzanie. d:liczbadni. attraction:tablicarozmiaru ;attraction[i]jestliczbąatrakcjiwmieście ,dla . Wynikiemfunkcjipowinnabyćmaksymalnaliczbaatrakcjimożliwychdoodwiedzenia przezJian-Jia. Podzadania Wewszystkichpodzadaniachzachodzi nieujemnaliczbaatrakcji. .Wkażdymmieścieznajdujesię Dodatkoweograniczenia: podzadanie 1 2 3 4 liczba punktów 7 23 17 53 maxliczbaatrakcjiwjednym mieście 1,000,000,000 100 1,000,000,000 1,000,000,000 miasto startowe dowolne miasto0 dowolne dowolne Implementacja Powinieneśzgłosićdokładniejedenplikonazwieholiday.c,holiday.cpplubholiday.pas.W plikupowinnaznaleźćsięimplementacjafunkcjiopisanejpowyżej,onastępującejsygnaturze.W przypadkuprogramuwC/C++powinieneśtakżezałączyć(include)pliknagłówkowyholiday.h. 2/3 Zauważ,żewynikmożebyćduży,adoprzechowywaniawynikufunkcjifindMaxAttractionjest używany64-bitowytypcałkowity. ProgramywC/C++ longlongintfindMaxAttraction(intn,intstart,intd, intattraction[]); ProgramywPascalu functionfindMaxAttraction(n,start,d:longint; attraction:arrayoflongint):int64; Przykładowyprogramsprawdzający Przykładowyprogramsprawdzającywczytujedanewnastępującymformacie: wiersz1:n,start,d. wiersz2:attraction[0],...,attraction[n-1]. PrzykładowyprogramsprawdzającywypiszenawyjściewynikfunkcjifindMaxAttraction. 3/3