Professional Documents
Culture Documents
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
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ć
Potrebno znanje:
matrice, brzo potenciranje, jednadžbe diferencija, formula uključivanja i
isključivanja
Kategorija:
matrično rješavanje jednadžbi diferencija