Professional Documents
Culture Documents
INFORMATIKE
5. KOLO
RJEŠENJA
HONI 2010/11 Zadatak GLJIVE
Najprije primijetimo da udaljenost broja X od 100 računamo kao razliku: X-100 ako
je X veći ili jednak 100, a 100-X ako je X manji od 100.
Redom zbrajamo brojeve bodova dodijeljene gljivama. Čim nam se pojavi zbroj koji
je veći ili jednak 100, ili ćemo odabrati taj zbroj, ili onaj prethodni (koji je manji od
100) - i onda od ta dva izračunamo koji je bliži 100 (ako su jednako blizu,
ispisujemo veći).
Ako se pak nikada ne pojavi zbroj veći ili jednak 100, ispisujemo posljednji zbroj.
Potrebno znanje:
Kategorija
Ad hoc
HONI 2010/11 Zadatak KOSARKA
Zadatak ćemo jednostavno riješiti ako za svaku sekundu u intervalu [0, 48*60]
zapamtimo je li u toj sekundi neka ekipa dala koš (i koja) u pomoćnome nizu. Kako
bismo ovo ostvarili, sva vremena u ulazu treba pretvoriti u sekunde.
Tada je dovoljno jednom for petljom proći po svim sekundama u pomoćnome nizu
te za svaku sekundu dodati jednu sekundu u rješenje odgovarajuće ekipe ako
rezultat nije izjednačen.
Potrebno znanje:
Kategorija
Ad-hoc
HONI 2010/11 Zadatak BRODOVI
Ako sada najraniji zabavni dan (nakon nultog) ima oznaku A, onda brod koji se prvi
pojavio u luci - dakle, koji se pojavio toga dana - ima period duljine A. Sada za sve
naredne zabavne dane djeljive s A zaključujemo da se dotični brod pojavio u te
dane, pa ih možemo ubuduće ignorirati (npr. postavljanjem njihove vrijednosti na -
1), zato što smo ustvrdili koji je brod bio uzrok tih zabavnih dana.
Gornji postupak ponavljamo: nalazimo sljedeći najraniji zabavni dan (koji nije
ignoriran) - neka je njegova oznaka B, i potom ignoriramo sve naredne zabavne
dane djeljive s B.
Potrebno znanje:
Osnove djeljivosti
Kategorija
Teorija brojeva
HONI 2010/11 Zadatak HONI
Neka su A1, A2, …, AN skupovi zadataka težina 1, 2, … N. Neka su B2, B3, ...BN
skupovi zadataka težina 1 ili 2, 2 ili 3, …, N-1 ili N. Osim toga, neka je B1 = 0.
Sada možemo riješiti zadatak dinamičkim programiranjem. Idemo po redu od prve
do N-te težine te za svaku težinu biramo zadatak. Kada biramo zadatak težine T,
moramo samo znati jesmo li u prethodnom koraku iskoristili neki od zadataka u
skupu BT. Zato je dovoljno imati tablicu oblika dp[t][b].
Potrebno znanje:
Dinamičko programiranje
Kategorija
Dinamičko programiranje
HONI 2010/11 Zadatak DVONIZ
Fiksirajmo sredinu zanimljivog niza na sve moguće načine. Jasno je da ako postoji
zanimljiv niz duljine 2N oko spomenute sredine, da će jednako tako postojati i
zanimljiv niz duljine 2M < 2N oko iste sredine za svaki prirodni M < N. To nas
dovodi do ideje da metodom binarnog pretraživanja nañemo za svaku sredinu
najdulji zanimljiv niz oko nje u složenosti O(n log n).
Za svaki element nas zanima koji je najdulji zanimljivi niz koji počinje sa tim
elementom. Rješavat ćemo element po element slijeva nadesno. Jasno je da nas od
svih zanimljivih nizova [ai, bi] koji počinju prije elementa kojeg obrañujemo
(označimo trenutni element sa X, dakle ai≤X) zanima onaj kojemu je vrijednost (bi-
ai+1)-2(X-ai) = bi+ai+1-2X maksimalna. No tu vrijednost je lako naći: kada
obrañujemo neko polje pamtimo maksimalnu dosad nañenu vrijednost te je
pokušamo poboljšati sa zanimljivim nizovima koji počinju na trenutnoj lokaciji.
Prilikom pomaka udesno, smanjimo najbolju dosadašnju vrijednost za 2 (zato jer se
pomakom X := X+1 navedena vrijednost uvijek smanjuje za 2). Implementacijom
navedenog je lagano doći do O(n log n) algoritma koji rješava cijeli problem.
Potrebno znanje:
Kategorija
Potrebno znanje:
Kategorija