You are on page 1of 7

ZADACI ZA SAMOSTALAN RAD

Format izrade rada: .pdf, .html


Programski jezik: C/C++
Rok izrade: 29.04.2013.
Način predaje: javiti e-mailom URL gde ste postavili rešenje

1. (5 poena) Hrabri vojskovođa Dušan je odlučio da nagradi zapovednike u svojoj vojsci zbog
uspešno vođenih ratova. Nakon završetka ratova, Dušan je savetovao svoje zapovednike da izaberu
teritoriju kvadratnog oblika i proizvoljne veličine koju žele da kontrolišu. Interesantno, nakon što
svaki zapovednik izabere svoju teritoriju, osoba koja je dobila zadatak da ispunjava želje
zapovednika, nejaki Uroš, je uočio da postoji više kvadrata na mapi nego zapovednika u Dušanovoj
vojsci.

Kao što možete videti sa crteža iznad, neki od kvadrata mogu da dodiruju stranice ili čak da ih
seku, kreirajući još kvadrata. Nas zanima da saznamo broj različitih kvadrata koji se mogu videti na
mapi koju je primio Uroš. Pomozite nam i kreirajte program koji će, za datu mapu, učitati dužinu
stranice i poziciju kvadrata kojeg crta zapovednik, i izračunati i ispisati ukupan broj kvadrata koji se
mogu videti na mapi. Na primer, za prvi crtež prikazan gore (levo), Vaš program treba da ispiše 11
(potrebno je pronaći 2 kvadrata čija stranica je dužine 1, 7 kvadrata čija stranica je dužine 2 i 2
kvadrata čija stranica je dužine 4).
Vaš C program treba da učitava sve podatke sa standardnog ulaza. Prva linija ulaza sadrži jedan
ceo broj N (1 ≤ N ≤ 100) - broj kvadrata koje crtaju generali.
Svaka od sledećih N linija sadrži 3 cela broja: Xi, Yi (1 ≤ Xi, Yi ≤ 10000000) i Li (1 ≤ Li ≤
10000000) – Xi, Yi su kordinate donjeg levog ugla i-tog kvadrata, Li je dužina stranice i-tog
kvadrata.
Vaš program treba da ispiše na standardni izlaz tačno jedan ceo broj – broj kvadrata koji se
mogu videti na Uroševoj mapi.
Procenite vremensku i prostornu složenost Vašeg rešenja.
Napomene:
1. U nekim test primerima, kvadrati koje zapovednici crtaju će imati formu pravougaone mreže
(pogledati crtež gore desno). U ovim test slučajevima, svaka pojedinačna ćelija mreže će biti
kvadrat zadan na ulazu.
2. Voditi računa da program ne premaši vremensko ograničenje od 2 sekunde i memorijsko
ograničenje od 64 megabajta.
Test primer 1
ulaz izlaz
9 11
1 1 2
3 1 2
5 1 2
ZADACI ZA SAMOSTALAN RAD
1 3 2
3 3 2
5 3 2
5 3 2
4 1 1
6 4 2

Test primer 2
ulaz Izlaz
12 20
1 1 3
4 1 3
7 1 3
10 1 3
1 4 3
4 4 3
7 4 3
10 4 3
1 7 3
4 7 3
7 7 3
10 7 3

2. (5 poena) Marko se priprema za takmičenje u Sabiranju koje se sastoji od igre koja uključuje
N specijalnih pločica sa označenim brojčanim vrednostima na njima. Cilj igre je uzeti određen broj
pločica tako da njihova ukupna suma vrednosti bude što bliže zadatom ciljnom broju, ali ne sme
biti veća od njega.

Svaka pločica je markirana sa jedinstvenim ID brojem, sopstvenom vrednošću kao i brojem


koji određuje njenog “prethodnika”. Tokom igre, jedna pločica može biti uzeta samo direktno
nakon što je uzet njen prethodnik. Neke od pločica su “početne pločice” (njihov predhodnik ima
oznaku -1) i ovo su jedine pločice koje mogu biti uzete na početku igre. Samo jedna početna pločica
može biti uzeta tokom jedne igre.
Drugim rečima, igra Sabiranja se igra tako što prvo izaberete pločicu čiji prethodnik ima ID -1,
a onda pločicu čiji prethodnik je pločica izabrana u koraku 1, onda pločicu čiji prethodnik je pločica
izabrana u koraku 2, itd. Nakon što uzmete najmanje jednu pločicu možete se zaustaviti kada god
zaželite.
Primetite da su na gornjoj slici početne pločice označene sivom bojom i da postoje strelice
koje idu od svake pločice ka njenom prethodniku. Primetite takođe da je ID napisan na desnoj strani
pločice, a vrednost se nalazi na njenoj levoj strani.
ZADACI ZA SAMOSTALAN RAD
Marko želi da mu pomognete da se pripremi za turnir i da napišete program koji će moći igrati
igru Sabiranja. Vaš program treba da je u stanju da čita nekoliko različitih ciljnih brojeva, od kojih
svaki predstavlja jednu igru, i da na izlazu štampa najbolju moguću sumu za svaki od ovih brojeva.
Svaki ciljni broj predstavlja jednu (novu) igru.

Ulaz
Prva linija na ulazu sadrži dva cela broja N (1 ≤ N ≤ 100000) i Q (1 ≤ Q ≤ 100000) – broj različitih
pločica i broj različitih igara sa različitim ciljnim brojevima za koje program treba da nađe najbolju
sumu. Svaka od sledećih N linija opisuje jednu pločicu u formatu "Vi Pi", gde je Vi (0 ≤ Vi ≤
20000) vrednost pločice, a Pi je ID njenog prethodnika. Pločica čiji ID je i je opisana u i-toj liniji
medju ovim linijama. (0-based). Postoji najmanje jedna pločica takva da je ID prethodnika -1.
Nijedna pločica ne može sama sebi biti prethodnik. Svaka od sledećih Q linija sadrži jedan celi broj
Ti (1 ≤ Ti ≤ 2000000000) - i-ti ciljni broj.
Izlaz
Vaš program treba da štampa najbolju sumu za svaki ciljni broj (u istom redosledu u kojem su ciljni
brojevi dati na Ulazu). Ukoliko nijedna postignuta suma nije manja ili jednaka datom ciljnom broju,
treba odštampati "none" (navodnike ne štampati, tu su samo radi jasnoće).
Napomene
Procenite vremensku i prostornu složenost Vašeg rešenja.
Vremenski limit: 1 sekunda
Memorijski limit: 64 megabyte-a

Primer 1
ulaz Izlaz
8 5 3
6 -1 8
8 3 8
4 3 16
2 0 None
3 -1
13 2
5 4
4 6
4
8
9
20
2

3. (5 poena) Fruška Gora je domaćin prvomajskog internacionalnog takmičenja u planinarskom


trčanju. Kako trkači trebaju puno vode za svoje napore, organizatori su pripremili skup lokacija gde
se mogu postaviti stanice za osvežavanje, zatim su te stanice povezali u jednu veliku konturu
koristeći jednosmerne staze (kao što je i pokazano na slici). Stanice za osveženje su označene
nazivima od S0 do SN-1 (krećući se u smeru obilaska konture), tako da staza Ti povezuje stanice Si i
Si+1 (u smeru prema Si+1) – i tako da je SN = S0.
ZADACI ZA SAMOSTALAN RAD

Poznato je da će svaki trkač potrošiti tačno Ki jedinica vode kako bi prošao do kraja stazu Ti, i
svaki trkač će moći uzeti najviše Wi jedinica vode na stanici za osvežavanje Si. Ne postoji
ograničenje za količinu vode koju svaki od trkača može nositi u bilo kojem trenutku ali je vreme
(mereno u minutama) koje trkač treba da završi jednu stazu jednako broju jedinica vode koju nosi
kada započne tu stazu – tako na primer ako trkač započne stazu T1 sa 5 jedinica vode, onda će je i
završiti za 5 minuta bez obzira na količinu vode koje mora potrošiti na toj stazi.
Organizatori sada razmatraju moguće početne i završne pozicije za trku (trka mora i početi i
završiti na nekoj od stanica za osveženje). Kreirajte program u programskom jeziku C koji će, za
svaki od Q parova početnih i završnih stanica, datih na ulazu u program, izračunati i odštampati na
izlazu minimalno potrebno vreme završetka utrke za nekog optimalnog trkača.
Ulaz
Prva linija na ulazu sadrži dva cela broja N (3 ≤ N ≤ 1000) i Q (1 ≤ Q ≤ 100000) – broj staza,
broj parova početnih i završnih stanica za osveženje koje organizatori razmatraju.
Druga linija na ulazu sadrži N celih brojeva Wi (1 ≤ Wi ≤ 1000000) – broj jedinica vode na
raspolaganju na svakoj od stanica za osveženje (počevši sa stanicom S0).
Treća linija na ulazu sadrži N celih brojeva Ki (1 ≤ Ki ≤ 1000000) – broj jedinica vode
potrebnih da se završi svaka od staza (počevši sa stazom T0).
Svaka od sledećih Q linija sadrži dva međusobno različita cela broja Si i Ei (0 ≤ Si, Ei ≤ N-1) –
jedan par početnih i završnih stanica za osveženje.

Izlaz
Za svaki dati par početnih i završnih stanica, u istom redosledu u kojem su dati na ulazu, Vaš
program treba da odštampa minimalno potrebno vreme da završi trku neki optimalan trkač. Ukoliko
se trka ne može završiti, vaš program treba na izlazu da odštampa "-1" (navodnici su dati radi
jasnoće).

Napomena
Procenite vremensku i prostornu složenost Vašeg rešenja.
Vremenski limit: 1 sekunda
Memorijski limit: 64 megabyte-a

Primer 1
Ulaz izlaz
7 4 2
3 2 5 2 5 1 6 -1
2 4 3 1 6 1 2 11
ZADACI ZA SAMOSTALAN RAD
0 1 5
4 5
2 5
5 1

4. (5 poena) Sima radi kao konobar i njegov zadatak je da donese piće na plažu. Kako bi doneo pića
što je brže moguće, Sima Vas moli za pomoć kako bi odredio najbolji mogući put od hotela do
plaže, dok u isto vreme posećuje sve lokacije koje sadrže pakete pića. Na pravougaonoj ploči koja
ima R redova i C kolona, startna pozicija, lokacije sa paketima pića i plaža mogu biti predstavljeni
kao što je pokazano u ovoj tabeli:

####.##.#.#
#S..#.D#.#.
.#.....#...
.D......B.#
....D...###

Početna pozicija je označena sa 'S', plaža je označena sa 'B' (beach) a lokacije sa paketima pića
su označene sa 'D' (drinks). Sima može stati na bilo koju lokaciju koja nije ograda (ograde su
označene znakom '#').
Vaš zadatak je da napišete C program koji će računati i štampati na izlazu minimalan broj
koraka koje Sima mora napraviti kako bi krenuo iz hotela, obišao sve lokacije sa paketima pića i na
kraju stigao do plaže. U svakom koraku Sima može ići na susednu vertikalnu poziciju ili susednu
horizontalnu poziciju u odnosu na njegovu trenutnu poziciju. Sima ne može posetiti poziciju koja
nije prikazana na mapi: drugim rečima, on ne može izaći sa mape – čak i ako nema ograde na ivici
mape koja bi ga u tome sprečavala.
Ulaz
Prva linija ulaza sadrži dva cela broja R i C (5 ≤ R, C ≤ 100) - R je broj redova na mapi, a C je
broj kolona na mapi.
Svaka od narednih R linija sadrži C karaktera Mij ('.', '#', 'S', 'D' ili 'B'). Ovi karakteri
predstavljaju zadatu strukturu mape. Postoji tačno jedan karakter 'S', tačno jedan 'B' karakter i
najviše 3 lokacije sa paketima pića ('D' karakteri na mapi). Uvek će biti najmanje jedan karakter
'D' na mapi.
Izlaz
Vaš program treba na izlazu da odštampa tačno jedan celi broj – minimalan potreban broj
koraka da bi se donela sva pića na plažu. Ukoliko je uzimanje paketa pića i dolazak na plažu
nemoguć, odštampati na izlazu -1.
Napomena
Procenite vremensku i prostornu složenost Vašeg rešenja.
Vremenski limit: 1 sekunda
Memorijski limit: 64 megabyte-a

Primer 1
Ulaz Izlaz
5 6 9
#S.###
#...##
ZADACI ZA SAMOSTALAN RAD
.#..##
D..B#.
##.#..

Primer 2
Ulaz izlaz
5 6 15
#S.###
#...##
D#..##
DB...D
##.#.#

5. (5 poena) Svaki uspešan radnik u uspešnoj programerskoj firmi će biti nagrađen za


predstojeći Božić. Naime, šef Vlada će svakom nagrađenom radniku pokloniti zlatnik u specijalno
obojenoj kutiji oblika kocke.
Međutim, nakon što je šef Vlada primio kutije iz lokalne prodavnice, otkrio je da nisu sve
jednako obojene. Tako da, Vaš zadatak je da pomognete prodavcu da izračuna minimalni broj
strana kocki koje se moraju obojiti iznova kako bi sve kutije za nagradu jednako izgledale (ili šef
Vlada neće platiti kutije). Dve kutije izgledaju jednako, ako nakon što su rotirane na odgovarajući
način, imaju iste boje na odgovarajućim stranama. Drugim rečima, dve kutije su jednake ako i samo
ako možete rotirati dve kutije tako da boja prednje strane prve kutije je jednaka boji prednje strane
druge kutije, boja leve strane prve kutije je jednaka boji leve strane druge kutije, i tako dalje.
Napisati C program koji sa standardnog ulaza učitava iz prve linije ulaza ceo broj N (2 ≤ N
≤ 100) - broj kutija za medalje. Potom iz svake od sledećih N linija učitati 6 celih brojeva Fi1,
Fi2, Fi3, Fi4, Fi5 i Fi6 (0 ≤ Fi1, Fi2, Fi3, Fi4, Fi5, Fi6 ≤ 6) – originalne boje za svih 6 strana i-te kutije
za medalju. Redosled ovih 6 celih brojeva koji opisuju boje kutije je zadat kao: prednja
strana (Fi1), gornja strana (Fi2), zadnja strana (Fi3), donja strana (Fi4), leva strana (Fi5) i desna
strana (Fi6).
Vaš program treba da ispiše minimalni broj strana koje se moraju obojiti iznova kako
bi sve kutije za medalju izgledale isto.
Proceniti vremensku i prostornu složenost rešenja.
Napomene:
1. U nekim test primerime, optimalno rešenje će biti da se oboje sve strane svih kutija istom bojom.
2. Voditi računa da Vaš program ne premaši vremensko ograničenje od 1 sekunde i memorijsko
ograničenje od 64 megabajta
Primer 1
Ulaz izlaz
2 0
3 1 4 2 5 6
5 1 6 2 4 3

Primer 2
Ulaz Izlaz
7 16
1 5 2 5 1 0
5 1 6 0 4 4
5 1 2 5 5 4
ZADACI ZA SAMOSTALAN RAD
4 3 6 1 3 4
4 5 0 0 5 1
5 3 4 3 4 1
3 4 5 5 1 4

Objašnjenje za primer 1: Dve kutije za medalju izgledaju isto (druga kutija izgleda isto kao
prva, ali je rotirana jednom udesno).

You might also like