Professional Documents
Culture Documents
Rjesenja PDF
Rjesenja PDF
Zaključujemo da moramo ispisati “NE” ako je zbroj naša četiri broja paran.
Sk
Bk = k
Slijedi
Sk+Ak+1
Bk+1 = k+1
Odavde dobivamo izraz za Ak+1
Ak+1 = (k + 1) ∙ Bk+1 − Sk
Elemente niza Ak+1 te njihov zbroj Sk iterativno računamo jednom petljom po nizu
B.
Pronađena četiri ruba određuju pravokutnik, ali nama treba kvadrat. Da bi kvadrat
prekrio sve točke, njegova stranica mora biti jednaka većoj stranici spomenutog
pravokutnika. Kad smo pronašli duljinu stranice kvadrata, njezinim kvadriranjem
(množenjem sa samom sobom) dobivamo traženu površinu.
Prvo, uočimo da obrtanje smjera riječi iz reda u red ne igra nikakvu ulogu što se
tiče broja pojedinih slova u nekom retku.
Naivno rješenje bilo bi simulirati upisivanje slova u svaki redak te brojati broj
pojavljivanja pojedinog slova u svakom retku u matricu broj[26][N]te samo
ispisati vrijednost u matrici za svaki upit. Memorijska složenost ovog rješenja je
O(N), a vremenska O(N2+K), što je dovoljno za 50% bodova. Implementaciju
ovog rješenja možete naći pod imenom piramida_n2.cpp.
Npr. kada bi riječ wbila “ABCD”, 12. red piramide bio bi:
CDABCDABCDAB = CDA + 2 * ABCD + AB = w[1..4] + 2 * w + w[0..2]
Da bismo mogli odrediti x, ii jza neki redak, moramo moći odrediti kojim slovo
riječ započinje u tom retku. Lako se pokaže da je za redak rto ta pozicija jednaka
ostatku dijeljenja broja r * (r1) / 2s m. Potrebno je pažljivo implementirati ovu
formulu jer rmože biti vrlo velik. Kada smo odredili poziciju, lako je odrediti
parametre x, ii j.
U ovom zadatku funkcionira pohlepni algoritam: ako postoji osoba X koju nitko nije
optužio, nju možemo proglasiti mafijom. Ako je ta osoba optužila osobu Y, onda
osobu Y ne možemo proglasiti mafijom pa i nju možemo potpuno ukloniti. Prilikom
uklanjanja osobe Y, osobi Z koju je ona optužila valja smanjiti brojač koliko je puta
optužena, tako da može eventualno biti proglašena mafijom.
Nakon ponavljanja ovoga postupka dok god možemo, ostat će nam ciklusi, tj. više
neće biti osobe koju nitko nije optužio. Tada bilo koju osobu možemo proglasiti
civilom i ukloniti, pa ćemo moći opet primijeniti gornji postupak, i tako dalje, sve
dok uopće ima neoznačenih osoba.
Najprije treba primijetiti da redoslijed useljavanja studenata u zgrade nije bitan: sve
što je bitno jest koliko će studenata useliti u koju zgradu, jer zabave se u pojedinoj
zgradi događaju potpuno neovisno o drugim zgradama. Možemo dakle
pretpostaviti da nam je zadano M brojeva: koliko studenata useljava u koju
zgradu.
½ * suma( xi(xi + 1) ), za i = 1 … P + 1.
Zanemarimo li dijeljenje s dva, ova buka jednaka je sumi kvadrata xi^2 uvećanoj
za običnu sumu xi, ali potonja je konstantna i jednaka ukupnom broju studenata
koji su doselili u dotičnu zgradu. Treba dakle minimizirati sumu kvadrata P + 1
brojeva čija suma je zadana.
Promotrimo slučaj kada je kamp postavljen kod kuće broj 1. Budući da je selo
predstavljeno kao graf stabla, put od kampa do bilo koje pojedinačne kuće u koju
idu volonteri je jedinstven. Pretpostavimo da se Mirko nakon što odveze sve
ekipe mora vratiti u kamp.
Kada doveze jednu ekipu do njihove kuće i ako se do kuće u koju ide neka druga
ekipa ide preko ove trenutne kuće, onda će naravno odmah odvesti i njih zbog
uštede vremena. Zbog pretpostavke da se Mirko na kraju mora vratiti u kamp,
rješenje bi tada bila dvostruka suma svih bridova koji povezuju kamp i sve kuće
u koju idu volonteri.
No, budući da je uvjet zadatka da Mirko ostaje pomagati zadnjoj ekipi (ne vraća se
u kamp), najbolje je uvijek na kraju odvesti najudaljeniju ekipu jer tako smo
bridove u grani stabla koja vodi do najudaljnije kuće prošli samo jednom pa je
konačno rješenje: dvostruka suma svih bridova koji povezuju kamp i sve kuće u
koju idu volonteri umanjena za duljinu bridova u najdužoj grani.
Pronalazak bridova koji povezuju kamp i kuće u koje idu volonteri može se
napraviti u složenosti O(N), a kada taj algoritam primijenimo tako da isprobamo
postaviti kamp u svaku kuću, konačna složenost je O(N2) i to rješenje donosi pola
bodova.
Označimo s K minimalno podstablo zadanog stabla koji sadrži sve kuće u koje
moraju doći volonteri i možda još neke kuće koje su na putu između kuća
volontera. Označimo sa S sumu svih bridova podstabla K. Tada rješenje za neku
kuću X glasi: