Download as pdf or txt
Download as pdf or txt
You are on page 1of 9

HRVATSKO OTVORENO NATJECANJE IZ

INFORMATIKE
4. KOLO

OPISI ALGORITAMA
HONI 2011/2012 Zadatak ROLETE
4. kolo, 18. veljače 2012. Autor: Bruno Rahle

Primijetimo da postoji N - 1 spojki između susjednih lamela, a budući


da svaka ima M rupa, ukupno je (N - 1)*M rupa.

Potrebno znanje: unos/ispis cijelih brojeva, osnovne računske


operacije

Kategorija: ad hoc

HONI 2011/2012 Zadatak KULE


4. kolo, 18. veljače 2012. Autor: Adrian Satja Kurdija

Razlikujemo tri slučaja.

1) Dane ploče su identične. Jasno, u ovom slučaju ispisujemo 0.

2) Dane ploče razlikuju se u poziciji jedne kule. Ovaj slučaj nastupa


kada ploče imaju točno dva različita polja (početno i završno polje
dotične kule). Provjerit ćemo nalaze li se ta dva polja na istoj
dijagonali: ako da, onda moramo dva puta pomaknuti kulu, a inače
samo jednom.

3) Dane ploče razlikuju se u poziciji obje kule. Ovaj slučaj nastupa


kada se ploče razlikuju u sva četiri polja. Očito je potrebno pomaknuti
obje kule, pa ispisujemo 2.

Potrebno znanje: naredbe grananja

Kategorija: ad hoc
HONI 2011/2012 Zadatak KINO
4. kolo, 18. veljače 2012. Autor: Adrian Satja Kurdija

Ako nema ljubavnih sjedala, postoji N+1 držača za čašu. Svaki par
ljubavnih sjedala umanjuje broj držača za jedan, pa vrijedi formula

broj_držača = N + 1 - broj_parova_ljubavnih_sjedala,

pri čemu je

broj_parova_ljubavnih_sjedala = broj_slova_L / 2.

Na koncu ispisujemo broj držača, osim ako ih ima N+1 pa će jedan


ostati neiskorišten (u tom dakle slučaju ispisujemo N).

Potrebno znanje: unos niza znakova (stringa), for petlja

Kategorija: ad hoc
HONI 2011/2012 Zadatak ZIMA
4. kolo, 18. veljače 2012. Autor: Bruno Rahle

Prolaskom po danom nizu temperatura pronalazimo zimske periode.


Preciznije, čim naiđemo na negativnu temperaturu, ona je početak
zimskog perioda pa brojanjem negativnih temperatura koje slijede
utvrđujemo koliko dana traje taj zimski period.

Za svaki tako pronađeni zimski period, koji traje od dana br. A do


dana br. B i čija duljina iznosi T = B - A + 1, u pomoćnom nizu (koji
početno sadrži same nule) postavit ćemo jedinice na pozicije od A -
2*T do A - 1, što znači da se u tim danima može govoriti da zima
dolazi. Usput ćemo u pomoćnoj varijabli spremati najveću pronađenu
duljinu zimskog perioda.

Na kraju treba odabrati neki od najduljih perioda i produžiti njegov


utjecaj na pomoćni niz. Preciznije, ako je odabrani najdulji period
duljine T i ako on započinje u danu br. A, tada će on, osim već
označenih dana od A - 2*T do A - 1, utjecati i na dane od A - 3*T do
A - 2*T - 1. On će tada povećati traženo rješenje za one dane u tom
intervalu u kojima se inače ne može govoriti da zima dolazi. Odatle
proizlazi način odabira najduljeg zimskog perioda: to će biti onaj za
koji se u pomoćnom nizu na pozicijama od A - 3*T do A - 2*T - 1
nalazi najveći broj nula, i upravo za taj broj bit će povećano konačno
rješenje.

Potrebno znanje: rad s nizom

Kategorija: ad hoc
HONI 2011/2012 Zadatak KEKS
4. kolo, 18. veljače 2012. Autor: Ivan Katanić

Primjetimo da će brisanjem K znamenki N-znamenkastog broja ostati


N-K znamenki istog broja. Sada možemo reći da je zadatak odabrati
N-K znamenki koje tvore najveći broj.

Problem rješavamo pohlepnim algoritmom, na način da najprije


odaberemo najveću moguću znamenku za prvo mjesto, takvu da nam
još uvijek ostavlja mogućnost odabiranja ostalih znamenki. Postupak
ponovimo za drugo mjesto, treće mjesto, i tako dalje do posljednjeg.
Ako u nekom koraku ima više takvih znamenki, uzimamo, naravno,
najljeviju jer nam ona ostavlja najviše mogućnosti, tj. ne možemo
postići bolji rezultat uzimanjem neke desnije.

Navedeni algoritam dat će najveći broj, jer znamenke obrađujemo


silazno po težini i ukoliko ne odaberemo najveću moguću znamenku za
neko mjesto, tada je takav broj sigurno broj manji od broja koji daje
naš algoritam.

Potrebno znanje: matematička analiza problema

Kategorija: pohlepni algoritmi

HONI 2011/2012 Zadatak OGRADA


4. kolo, 18. veljače 2012. Autor: Ivan Katanić

Označimo i-tu najmanju Mirkovu dasku s Ai, te i-tu dasku konačne


Mirkove ograde sa Ci.

Ljepota Mirkove ograde jednaka je sumi apsolutnih razlika susjednih


dasaka:
|C1 - C2| + |C2-C3| + … + |CN-1 - CN|

Budući da znamo odnose susjednih dasaka u ogradi, tu sumu možemo


zapisati i običnim zagradama te se tako riješiti apsolutnih razlika.

Ako bismo se sada riješili i običnih zagrada te grupirali iste članove, uz


svaku dasku Ci dobili bismo koeficijent u intervalu [-2,+2].
Ako bismo sada dasku A1 stavili na mjesto s najmanjim koeficijentom,
dasku A2 na mjesto s drugim najmanjim koeficijentom, i tako dalje, do
daske An na mjesto s najvećim koeficijentom, ljepota ograde sigurno
bi bila maksimalna.

Kako postoji više mjesta s istim koeficijentima, potrebno je pronaći


način na koji ćemo ih odabirati za pojedine daske tako da i dalje vrijedi
prethodno spomenuti uvjet te da ograda bude slična Slavkovoj.

Podjelu vršimo sljedećim redosljedom:

1.) Mjesta s koeficijentom +2 ili -2. Daske na tim


mjestima veće su (ili manje) od obje susjedne daske te
stoga ne postoje susjedna mjesta s tim koeficijentom, pa
na ta mjesta proizvoljno postavljamo najveće odnosno
najmanje daske, koje će sigurno biti veće (manje) od
susjednih jer ćemo njih tek kasnije postaviti.

2.) Mjesta s koeficijentom +1 ili -1. Primijetimo da taj


koeficijent mogu imati samo prva i posljednja daska, pa
tako na mjesto +1 možemo postaviti najveću preostalu
dasku, a na mjesto -1 najmanju.

3.) Mjesta s koeficijentom 0. To su daske koje su manje


od jedne susjedne daske, a veće od druge. Primijetimo da
smo se za odnose dasaka na tim mjestima s daskama iz
koraka 1. i 2. već pobrinuli, pa nam ostaju samo
međusobni odnosi tih dasaka jer one mogu biti susjedne.
Ako ih promatramo kao podnizove uzastopnih dasaka,
primijetimo da su ovi podnizovi ili strogo rastući ili strogo
padajući pa na mjesta u nekom podnizu stavljamo
proizvoljno odabrane daske (od preostalih nakon koraka 1.
i 2.) sortirane uzlazno ukoliko je podniz rastući odnosno
silazno ukoliko je padajući.

Potrebno znanje: matematička analiza problema

Kategorija: ad hoc
HONI 2011/2012 Zadatak BROJ
4. kolo, 18. veljače 2012. Autor: Goran Gašić

Primijetimo da modifikacijom Eratostenovog sita možemo efikasno


riješiti zadatak za veće vrijednosti P. Sito radimo na brojevima u
intervalu [1, 109 / P]. Svaki od njih odgovara višekratniku od P.
Možemo prilikom provođenja algoritma odrediti najmanje proste
faktore ili označiti samo višekratnike prostih brojeva manjih od P kao u
priloženom rješenju.

Za manje vrijednosti P zadatak možemo riješiti binarnim


pretraživanjem na brojevima u intervalu [1, 109 / P]. Ponovno, svaki
od njih odgovara višekratniku od P. Za odabran broj treba odrediti
koliko je brojeva manjih ili jednakih njemu takvih da je P njihov
najmanji prosti faktor. Ovo rješavamo funkcijom uključivanja-
isključivanja na prostim brojevima manjim od P.

Uz pažljivu implementaciju funkcije uključivanja-isključivanja, rješenje


za manje vrijednosti P bit će dovoljno brzo i za mnogo veće P. Razradu
ovog rješenja ostavljamo za vježbu čitatelju.

Alternativno, zadatak za manje vrijednosti P možemo riješiti


iskorištavanjem periodičnosti najmanjih prostih faktora. Neka je A(n)
najmanji prost faktor od n, B(k) k-ti prost broj, a T(k) umnožak prvih k
prostih brojeva. Za A(n) ≤ B(k) vrijedi A(n + T(k)) = A(n). Stoga je
dovoljno izračunati funkciju A(n) za n ≤ T(k) kako bismo odredili N-ti
po veličini broj čiji je najmanji prost faktor jednak B(k).

Potrebno znanje: Eratostenovo sito, formula uključivanja-


isključivanja

Kategorija: teorija brojeva, kombinatorika


HONI 2011/2012 Zadatak KRIPTOGRAM
4. kolo, 18. veljače 2012. Autor: Goran Žužić

Zadatak se rješava modifikacijom Knuth-Morris-Pratt (KMP) algoritma


za pretraživanje stringova. Radi jednostavnosti izlaganja, uvedimo
nekoliko oznaka:

● Označimo sa A[1], A[2], …, A[n] redom prvu, drugu, …, n-tu


riječ u kriptiranom tekstu. Dodatno, neka A[x, y] označava
rečenicu napravljenu od (A[x], A[x+1], …, A[y]) za neke 1 ≤ x ≤
y ≤ n.
● Analogno, označimo sa B[1], B[2], …, B[m] redom prvu, drugu,
…, m-tu riječ u rečenici koju tražimo te neka B[x, y] označava
rečenicu napravljenu od (B[x], B[x+1], …, B[y]) za neke 1 ≤ x ≤
y ≤ m.
● Neka podudara(A[x, x+L], B[y, y+L]) označava logičku
vrijednost ovisno o tome može li se tekst A[x, x+L] ikako
dekriptirati u B[y, y+L]. Primjerice, podudara(“a b a”, “c d c”) =
Istina; podudara(“a b b”, “x y z”) = Laž.

Sada ćemo ukratko opisati samu modifikaciju KMP algoritma. Kao i u


klasičnoj verziji, potrebno je izračunati prefiks funkciju P[1, 2, …, m],
ali uz ovo pomalo promijenjeno značenje. Vrijednost P[x] treba biti
jednaka najvećoj vrijednosti L takvoj da:

podudara(B[1,L], B[x-L+1, x]) = Istina1

Nakon izračuna niza P, slijedi traženje B unutar A. Opet nas za svaku


riječ u A zanima najveći sufiks koji odgovara nekom prefiksu B.
Ukoliko naletimo na nemogućnost poklapanja, skočimo na najveći
mogući prefiks B-a s kojim možemo nastaviti, a tu smo vrijednost već
izračunali u nizu P.

Iako je opis idejno gotov, direktna implementacija ideje nailazi na


jedan bitan problem. Nije lako brzo evaluirati predikat poduduara.
Kako bismo poboljšali složenost, tekstove A i B ćemo promijeniti u
prikladniji oblik. Definirajmo transformaciju T(X) kao:

1
Primjetite da je ova definicija gotovo analogna onoj u klasičnom KMP algoritmu, uz
razliku da se ovdje funkcija jednakosti stringova definira pomoću predikata podudara
umjesto pomoću standardne provjere jednakosti. Zanima nas najveći sufiks x-tog
znaka rečenice B koji se podudara sa prefiksom B-a.
T(X)[i] = -1 ako se riječ X[i] ne pojavljuje u rečenici X[1, i-1]
T(X)[i] = j ako je j najveći indeks manji od i za koji X[i] = X[j]

Uz transformacije A’ := T(A) i B’ := T(B) moguće je u linearnom


vremenu evaluirati funkciju podudara što je dovoljno za dobiti sve
bodove. Ukupna je složenost algoritma linearna nakon provedene
transformacije.

Potrebno znanje: Knuth-Morris-Pratt algoritam

Kategorija: pretraživanje stringova

You might also like