You are on page 1of 9

HRVATSKO OTVORENO NATJECANJE IZ

INFORMATIKE

4. KOLO

RJEŠENJA
HONI 2009/2010 Zadatak AUTORI
4. kolo, 13. veljače 2010. Autor: Marko Ivanković
Ovaj zadatak spada u ad-hoc kategoriju zadataka. Ključna observacija na
kojoj se temelji rješenje je da se skraćeni oblik naziva sastoji isključivo od
velikih slova prisutnih u proširenom obliku. Kako su u proširenom obliku
velika slova prisutna samo nakon znaka '-' i na samom početku, to znači da
su sva velika slova prisutna u proširenom obliku nužno prisutna u skraćenom
obliu. Dakle, da bi se dobio skraćeni oblik dovoljno je proći jednom po
proširenom obliku i ispisati sva velika slova.

Potrebno znanje:
Učitavanje niza znakova, prolaz po nizu znakova znak po znak,
prepoznavanje tipa znaka

Kategorija:
ad-hoc
HONI 2009/2010 Zadatak PLANINA
4. kolo, 13. veljače 2010. Autor: Marko Ivanković
Algoritam opisan u tekstu ovog zadatka zaista se koristi za generiranje
umjetnih terena. Ovaj zadatak i prilično dobro oslikava nedostatak algoritma,
budući da je nakon 16 iteracija broj točaka, čak i kad se samo jednom
31
spremaju u memoriju, veći od 2 .
Za rješavanje zadatka potrebno je primjetiti prvo, da će točke uvijek tvoriti
kvadrate. Ukupni broj točaka tako će uvijek biti kvadrat broja točaka u prvom
redu. Pogledajmo sada kako se mijenja broj točaka u prvom redu iz koraka
u korak. U svakom koraku, između svaki dvije točke dodaje se jedna nova
točka. Dakle, ukoliko u nekom koraku imamo X točaka početno, među njima
je X - 1 mjesto na kojem se dodaje, što daje 2X - 1 točaka ukupno na kraju
koraka. Dakle, označimo li s broj točaka nakon koraka i, vidimo da vrijedi
. Indukcijom se može dokazati kako je broj točaka u prvom redu
nakon N koraka jednak .

Potrebno znanje:
Učitavanje broja, petlje, prepoznavanje implicitno zadanih pravilnosti

Kategorija:
matematika
HONI 2009/2010 Zadatak IKS
4. kolo, 13. veljače 2010. Autor: Filip Barl

Uzmimo proizvoljan prost broj X i uočimo prvo vezu između toga koliko
su puta pojedini brojevi niza djeljivi s X i toga koliko je puta vrijednost
niza djeljiva s X. Naime, pošto je vrijednost niza zapravo najveći zajednički
djeljitelj njegovih elemenata, vrijedi:

gdje brojevi govore koliko je puta redom prvi, drugi, ..., n-ti broj
niza djeljiv s X, dok A označava koliko je puta vrijednost niza djeljiva s X.
Očito je da A mora biti manji ili jednak od svakog , a pošto se radi o
najvećem zajedničkom djeljitelju, uzimamo što veći A.
Trivijalno je jasno da dijeljenjem nekog broja s X, a množenjem drugog s X
zapravo u nizu jednom broju oduzimamo 1 a drugom dodajemo 1.
Kako je nama cilj maksimizirati A, a A je najmanji broj u nizu, korištenjem
gornje operacije opetovano povećavamo najmanji broj u nizu za jedan,
sve do onog trenutka kad bi za povećavanje najmanje broja bili prisiljeni
neki drugi broj smanjiti ispod najmanjeg broja. Lako je za vidjeti da su u
takvoj situaciji brojevi u nizu približno jednaki s tim da je dio
brojeva jednak najvećem cijelom broju manjem ili jednakom od , a dio
jednak najmanjem cijelom broju većem ili jednakom od .
Sad je rješenje jednostavno. Eratostenovim sitom nađemo sve proste brojeve
manje od ograničenja. Za svaki prosti broj za sve brojeve prebrojimo broj
faktora. Koristeći gornju formulu izračunamo udio tog prostog broja u
rješenju.

Potrebno znanje:
Učitavanje niza, faktorizacija, prosti brojevi.

Kategorija:
matematika
HONI 2009/2010 Zadatak OGRADA
4. kolo, 13. veljače 2010. Autor: Bruno Rahle

Ovaj je zadatak autor osmislio čisteći snijeg sa automobila. Problem je


poprilično lako svesti na ekvivalentan zadatak sa histogramima koji se dosta
jednostavno riješi u tri koraka.
1. Za svaki trupac izračunamo kolika je najviša visina do koje možemo
bojati ako lijevi rub Super Krečka dodiruje taj trupac. Ovaj korak
uporabom strukture monotonog reda može imati složenost O( N ).
2. Za svaki trupac pronađemo najviši potez Super Krečka koji ga boji.
Razlika takvog poteza i visine trupca odgovara površini koju će Matija
morati bojati četkicom za zube. Ovaj korak, također uporabom
strukture monotonog reda, može imati složenost O( N ).
3. Za svaki trupac pohlepnim algoritmom izračunamo trebamo li napraviti
novi potez kojim ćemo ga obojiti. Složenost je također O( N ).
Zadatak je bio takav da ga je bilo moguće riješiti i koristeći druge strukture
te je dobro implementirano rješenje složenosti O( N log N ) također dobivalo
sve bodove.

Potrebno znanje:
Učitavanje niza, petlje, poznavanje struktura podataka, pohlepni algoritmi.

Kategorija:
Pohlepni algoritmi, strukture podataka.
HONI 2009/2010 Zadatak KABOOM
4. kolo, 13. veljače 2010. Autor: Leo Osvald, Luka Kalinovčić
Zadatak možemo rješiti na nekoliko načina. Jedan od načina jest da pomoću
dinamičkog programiranja najprije izračunamo na koliko načina možemo
svinuti lijevi kraj trake u "spiralu" duljine L čiji je najkraći nesavinuti dio
jednak K (K ≥ A), te isto učinimo i za desni kraj. Pomoću tih podatak možemo
izračunati na koliko načina možemo lijevi, odnosno desni kraj trake savinuti u
spiralu duljine L čija su zadnja dva nesavinuta dijela dugačka D, a sumacijom
po D-u također i na koliko načina se može dobiti spirala duljine L čija su
zadnja dva segmenta jednaka a duljina zadnja dva kraja im je barem jednaka
2
1. Vremenska složenost ovakvog predračunanja jest O(N ), gdje je N duljina
trake, a ono nam omogućuje da ubuduće u vremenskoj složenosti O(1)
odgovoriti na sljedeće pitanje: na koliko načina se može dobiti traka duljine L
čija su zadnja dva nesavinuta segmenta jednaka, i koja neće eksplodirati (tj.
najmanji segment je barem jednak A odnosno B). Označimo to sa oznakama
dpA[L] te dpB[L].
Primjetimo sada da postoji 3 vrste savijanja:
1) lijevi odnosno desni kraj traje je savinut u spiralu duljine L čija su zadnja
dva segmenta jednaka, a onaj drugi kraj nije savinut.
2) oba kraja su savinuta u spiralu na način da su im zadnja dva segmenta u
svakoj spirali jednaka, a između te dvije spirale se nalazi nesavinuti segment
trake duljine M.
3) cijela traka je nasavinuta
Za slučaj 1) variramo duljinu spirale L, pa ukupan broj načina na kojih se
takva traka može svinuti jest
.
Za slučaj 2) variramo duljinu srednjeg segmenta M, te zatim duljinu lijeve
spirale, a duljina desne spirala određena je pomoću ta dva podatka. Zato je
broj načina za taj slučaj jednak:
.
Ukupan broj načina je stoga jednak zbroju gornje dvije sume uvećanom za
jedan (slučaj nesavinute trake). Ukupna složenost ovog algoritma jednaka je
2
O(N ).
Potrebno znanje:
dinamičko prograniranje

Kategorija:
dinamičko prograniranje
HONI 2009/2010 Zadatak PALACINKE
4. kolo, 13. veljače 2010. Autor: Luka Kalinovčić

Pretpostavimo, za početak da Ana ne mora nužno kupiti sve namirnice, te


postavimo jednadžbe diferencija koje će nam pomoći izračunati broj tura.
Neka je Xi[t] broj različitih tura, koje nakon t sekundi završavaju u raskrižju
i.
Da bismo postavili jednadžbe promatramo sve bridove koji vode u vrh i. Za
svaki takav brid (j, i), na desnu stranu jednadžbe dodajemo slučaj da je Ana
došla u čvor i preko tog brida bez ulaska u dućan x j[t-1], te slučaj da je Ana
došla u čvor i preko tog brida i da je usput svratila u dućan x j[t-2].
Za svako raskrižje na taj način dobivamo jednadžbe oblika X i[t] = xa[t-1] +
xa[t-2] + xb[t-1] + xb[t-2] + ...
Neka je S[t] broj različitih tura koje završavaju u vrhu 1 i traju najviše t
sekundi.
Jednadžba glasi: S[t] = S[t-1] + X1[t]
Ukupni broj tura koje završavaju u vrhu 1 i traju najviše T sekundi daje broj
S[T] koji možemo dobiti tako da zapišemo sve ove diferencijske jednadžbe
pomoću matrice, pa brzim matričnim potenciranjem dignemo tu matricu na
T-tu potenciju.
S[T], nažalost, sadrži i puteve koji ne mogu pribaviti sve namirnice.
Taj problem rješavamo formulom uključivanja i isključivanja. Dakle, broju
S[T] treba oduzeti broj tura koje ne nabave brašno, broj tura koje ne nabave
jaja, broj tura koje ne nabave mlijeko, te broj tura koje ne nabave pekmez.
Sada smo višestruko oduzeli ture koje na primjer ne nabavljaju niti mlijeko
niti pekmez, pa takve ture treba zbrojiti, i tako dalje.
Da bismo rješili svaki od ovih potproblema, dovoljno je samo gornje
jednadžbe diferencija modificirati tako da se uklone članovi x j[t-2] ako dućan
na vezi (j, i) sadrži namirnicu koju ne treba nabaviti.
Dakle, potrebno je ukupno 16 puta matričnim potenciranjem rješiti
jednadžbe diferencija, te zbrojiti i oduzeti odgovarajuća rješenja prema
formuli uključivanja i isključivanja.

Potrebno znanje:
matrice, brzo potenciranje, jednadžbe diferencija, formula uključivanja i
isključivanja

Kategorija:
matrično rješavanje jednadžbi diferencija

You might also like