Sunteți pe pagina 1din 6

OLIMPIADA NAIONAL DE INFORMATIC

FOCANI 2003

Clasele XI-XII

asmin Sursa : asmin.c, asmin.cpp sau asmin.pas


Se consider un arbore (graf conex aciclic) cu N vrfuri, fr rdcin fixat. Drept rdcin, poate fi
ales oricare dintre vrfuri. S presupunem c a fost ales vrful cu numrul T. ntre oricare vrf i T exist un
drum unic care conine fiecare vrf al arborelui cel mult o singur dat (un drum ntre vrfurile i i j este o
secven de vrfuri, care ncepe cu i, se termin cu j, iar ntre oricare dou vrfuri consecutive exist o
muchie n arbore). Fiecrui vrf i(inclusiv T) trebuie s i se asocieze o valoare Vi, mai mare sau egal cu
0, astfel nct suma valorilor vrfurilor de pe drumul dintre i i rdcina T, mprit la K, s dea restul Ri.
Se definete costul arborelui cu rdcina fixat n T, CT, ca fiind suma valorilor asociate fiecrui nod. Dintre
toate posibilitile de alegere a valorilor Vi care respect condiia precizat anterior, se va alege aceea pentru
care CT este minim.
Se constat uor c alegnd alt vrf drept rdcin, de exemplu, vrful S (diferit de T), CS nu este
neaprat egal cu CT.

Cerin
Dndu-se un arbore cu N vrfuri, un numr ntreg K i valorile Ri, i=1,2,..,N, corespunztoare
fiecrui vrf, determinai acele vrfuri T care pot fi alese drept rdcin, pentru care costul CT este minim
(adic CT CS, oricare ar fi S diferit de T), precum i costul respectiv.

Date de intrare
Pe prima linie a fiierului de intrare asmin.in se afl 2 valori ntregi: N i K. Pe urmtoarele N-1
linii se afl cte dou numere ntregi a b, separate printr-un spaiu, avnd semnificaia c exist muchie
ntre vrfurile a i b. Vrfurile sunt numerotate de la 1 la N. Pe urmtoarea linie se afl N numere ntregi,
reprezentnd valorile Ri, i=1,2,..,N.

Date de ieire
Pe prima linie a fiierului de ieire asmin.out se vor afia dou valori ntregi: C i M. C reprezint
costul minim posibil al arborelui. M reprezint numrul de vrfuri care pot fi alese drept rdcin i pentru
care se obine costul C. Pe a doua linie se afl M numere ntregi separate prin cte un spaiu, scrise n ordine
cresctoare, reprezentnd numerele vrfurilor ce pot fi alese ca rdcin astfel nct s se obin costul C.

Restricii i precizri
2 N 16000
2 K 1000
0 Ri K-1
Cel puin 40% din testele folosite la evaluare vor avea N 1000

Exemplu
asmin.in asmin.out Cei doi arbori obinui (mpreun cu valorile
5 3 5 2 asociate vrfurilor) sunt urmtorii:
1 2 1 5
1 3 1 5
2 4 V1=0 V1=2
2
V2=1 V2=1
2 5 2
3 V3=2 1 V3=2
0 1 2 1 0 V4=0 4 V4=0
4 5 V5=2 V5=0
Timp maxim de execuie: 0.2 secunde/test (att 3

sub Windows, ct i sub Linux)


OLIMPIADA NATIONALA DE INFORMATICA
FOCSANI 2003

Clasele XI-XII
cutare Sursa: cautare.c, cautare.cpp sau cautare.pas

tim cu toii ce este un arbore binar de cutare. Este acel arbore binar n care informaia din orice nod este mai mare
dect informaiile nodurilor din subarborele stng al nodului respectiv i mai mic dect cele din subarborele drept.
Cnd se caut o informaie ntr-un arbore binar de cutare, ncepem din rdcina arborelui i comparm cu informaia
din rdcin. Dac informaia cutat e mai mic dect informaia din rdcin, se continu cutarea n subarborele
stng, iar dac e mai mare n subarborele drept. Dac cele dou informaii sunt egale cutarea se termin cu succes.
Dac n direcia n care continum cutarea (stnga sau dreapta) subarborele nu mai are noduri nseamn c informa-
ia cutat nu se gsete n arbore. Evident, numrul de comparaii efectuate la o cutare depinde de distana dintre
rdcin i nodul n care se gsete informaia, respectiv cel la care putem decide c informaia nu se afl n arbore.
Ce s-ar ntmpla dac nainte de a construi arborele binar de cutare am ti ce informaii urmeaz s fie cutate n el?
Nu cumva am putea construi arborele n aa fel nct s minimizm numrul de comparaii efectuate?
De exemplu cu informaiile 1, 2 i 3 putem construi un arbore binar de cutare n
urmtoarele 3 moduri (din totalul de 5 posibile):
Dac vom cuta informaiile (1, 1, 3, 1, 2), atunci timpul total de cutare este pentru
arborele din stnga 1+1+3+1+2 = 8, pentru arborele din centru 2+2+2+2+1 = 9, iar
pentru arborele din dreapta 3+3+1+3+2 = 12
Deci arborele din stnga este cel adecvat pentru cutrile noastre, iar timpul total de cutare minim este 8.
De remarcat c dac se caut o informaie care nu exist n arbore atunci numrul de comparaii efectuate la cutare
este egal cu nivelul ultimului nod interogat. De exemplu, dac se caut informaia 4 pe cei trei arbori atunci timpii vor
fi: 3, 2, respectiv 1 (de la stnga la dreapta).
Cerin
Scriei un program care, pentru anumite informaii cutate, determin timpul total de cutare minim.
Date de intrare
Din fiierul cautare.in se citete de pe prima linie numrul T de teste. n fiier urmeaz cele T teste. Pentru fiecare
test n fiier sunt scrise urmtoarele linii:
prima linie conine N, numrul de noduri ale arborelui de cutare i M numrul de interogri, separate prin spaiu;
pe urmtoarea linie urmeaz N numere ntregi distincte, separate prin cte un spaiu, reprezentnd informaiile din
nodurile arborelui
pe fiecare dintre urmtoarele M linii sunt cte 2 numere ntregi separate printr-un spaiu, reprezentnd un numr
cutat i respectiv de cte ori a fost cutat (ntre 1 i 100).
Date de ieire
n fiierul cautare.out se va scrie, pentru fiecare test cte o linie care conine timpul total minim de cutare pentru
interogrile din testul respectiv.
Restricii
0<T, N<101; 0<M<1001
informaiile nodurilor arborelui sunt numere ntregi din intervalul [-10000, 10000]
informaiile cutate sunt numere ntregi din intervalul [-1000000, 1000000] i pot fi cutate de un numr de
ori cuprins ntre 1 i 100.
Exemplu
cautare.in cautare.out Explicaii
3 8
3 3 251
1 2 3 22
Primul test este cel discutat. n al doilea test se
1 3 interogheaz 1 de 50 de ori, 2 de 49 de ori si 3 de 51 de
2 1 ori. Cel mai bun rezultat se obine n cazul arborelui din
3 1 centru, i anume 251 (2*50+49+2*51). Al treilea test
3 3
conine o interogare a lui 4 (care nu se afl n arbore) de
1 2 3
1 50 multe ori (20). Evident c cel mai bun e arborele din
2 49 dreapta, pe care ne dm seama repede c 4 nu se afl n
3 51 arbore. Timpul total este (1*20+2).
3 2
1 2 3
2 1
4 20
Observaii:
Pentru un fiier se ia punctajul maxim dac toate testele din fiier sunt corecte, altfel 0 puncte.
Pentru 5 fiiere de test (din 10) T<4.
Timpul maxim de execuie pentru un fiier de test: 1.5 secunde/Windows respectiv 0.3 secunde/Linux.
OLIMPIADA NATIONALA DE INFORMATICA
FOCSANI 2003

Clasele XI-XII
a007 Sursa: a007.c, a007.cpp sau a007.pas
Agentul 007 are de distrus o tabr de teroriti. Tabra de teroriti este format din mai multe obiective
(depozite de muniie, pavilioane pentru teroriti, etc.), considerate punctiforme n plan. Agentul 007 primete
de la serviciul de informaii o hart cu n obiective din tabra teroritilor, date prin coordonatele carteziene.
Pe lng hart, agentul 007 mai primete i o arm special (construit pentru aceast misiune). Arma
primit are dou evi i permite tragerea simultan pe aceeai direcie (rectilinie), dar n sens invers a dou
rachete cu aceeai vitez. Dup ce se trage cu arma, odat cu atingerea unei inte explodeaz i cealalt
rachet (chiar dac aceasta din urma nu i-a atins inta).
Cerin
Agentul 007 vrea s distrug tabra ct mai repede i cu ct mai puine rachete, pentru acest lucru el studiaz
posibilitatea s se aeze ntr-un punct din tabr (diferit de obiective) care s permit trageri eficace, adic
la fiecare tragere s distrug cte dou obiective simultan.
Determinai dac este posibil s se gseasc un astfel de punct.
Date de intrare
n fiierul a007.in pe prima linie se afl numrul de teste k, dup care urmeaz date pentru fiecare test.
Pentru fiecare test pe o linie se afl n, iar pe urmtoarele n linii sunt coordonatele obiectivelor din tabra
teroritilor (separate printr-un spaiu n ordinea abscis ordonat).

Date de ieire
n fiierul a007.out se vor scrie k linii, pe fiecare linie se va scrie 1, dac exist soluie i 0 dac nu exist
soluie. n cazul n care exist soluie se va scrie n continuare pe aceeai linie separate, printr-un spaiu
coordonatele punctului cerut (numere reale trunchiate la 4 zecimale, n ordinea abscis ordonat).

Restricii
0 n 10000
1 k 3
coordonatele punctelor sunt ntregi din intervalul [-10000, 10000]
Observaie
Un obiectiv este distrus dac racheta explodeaz exact n punctul corespunztor lui.

Exemplu
a007.in a007.out
2 1 5.0000 5.0000
4 0
10 0
10 10
0 10
0 0
6
0 0
10 0
2 10
12 0
5 0
7 0

Timp maxim de execuie/test 0.2 secunde (pentru Windows i Linux)


OLIMPIADA NAIONAL DE INFORMATIC
FOCANI 2003

Clasele XI-XII

inter Sursa : inter.c, inter.cpp sau inter.pas

n ara Smar sunt N autostrzi, sub forma unor drepte n plan. Se tie c la intersecii de drumuri
(care includ i autostrzi) exist un risc ridicat de accidente. De aceea poliitii din aceast ar au
hotrt stabilirea unei zone compacte care s includ toate interseciile i n care s se supravegheze
atent circulaia. Din motive financiare zona trebuie s fie de perimetru minim.

Cerin
Scriei un program care s determine aria zonei de supraveghere alese.

Date de intrare
Din fiierul inter.in se va citi de pe prima linie numrul de autostrzi, iar de pe fiecare dintre
urmtoarele N linii cte patru numere reale, separate prin cte un spaiu, reprezentnd coordonatele
a dou puncte distincte ce determin cte o dreapt. Ele sunt date n ordinea X1 Y1 X2 Y2, adic
abscisa i ordonata punctului 1, apoi abscisa i ordonata punctului 2.

Date de ieire
n fiierul inter.out se va scrie pe prima linie un singur numr real, cu dou zecimale exacte (cu
trunchiere), reprezentnd aria zonei alese pentru supraveghere.

Restricii i precizri
ntre oricare dou autostrzi exist fix o intersecie.
Aria suprafeei de supraveghere este strict pozitiv pentru datele de test.
5 teste din 10 vor avea N < 501.
2 < N < 5001

Exemplu
inter.in inter.out
4 3.00
0 0 1 0
0 0 0 2
0 2 1 0
-2 0 0 1

Timp maxim de execuie/test : 0.2 secunde pentru Linux, 1.5 secunde pentru Windows.
OLIMPIADA NATIONALA DE INFORMATICA
FOCSANI 2003

Clasele XI-XII

nr Sursa : nr.c, nr.cpp sau nr.pas

Fie x un numr natural cu exact n cifre scris n baza 10.

Cerin
Scriei un program care s determine cel mai mic numr natural strict mai mare dect x, care are
aceleai cifre ca i numrul x i care este palindrom.

Date de intrare
Fiierul de intrare nr.in conine dou linii. Pe prima linie este scris n, numrul de cifre ale
numrului x. Pe cea de a doua linie sunt scrise cele n cifre ale lui x.

Date de ieire
Fiierul de ieire nr.out conine o singur linie pe care se afl cel mai mic numr natural strict
mai mare dect x, care are aceleai cifre ca i numrul x i care este palindrom. Dac nu exist
soluie pe prima linie a fiierului de ieire va fi scris valoarea 0.

Restricii
2n1000
Numim palindrom un numr care citit de la stnga la dreapta, ct i de la dreapta la stnga este
acelai (de exemplu 1331, 12321, etc).
Prima cifr a unui numr trebuie s fie nenul.
Prin aceleai cifre se nelege c fiecare cifr de la 0 la 9 apare n rezultat de acelai numr de ori
ca i n numrul x.

Exemple

nr.in nr.out
5 0
12022

nr.in nr.out
5 20102
12200

Timp maxim de execuie: 0.1 secunde/test (att sub Windows ct i sub Linux).
OLIMPIADA NATIONALA DE INFORMATICA
FOCSANI 2003

Clasele XI-XII
proc Sursa : proc.c, proc.cpp sau proc.pas
O aplicaie ce trebuie executat pe un calculator multi-procesor const din N fragmente de cod independente,
ce pot fi rulate n paralel. Fiecare fragment trebuie executat n totalitate pe un singur procesor. Din dorina de
a paraleliza ct mai mult aplicaia, fragmentele de cod au dimensiuni mici i, n consecin, timpi de execuie
mici. Mai precis, execuia fiecrui fragment dureaz UNUL sau DOU cicluri de ceas pe un procesor de
tipul Pentium IV.
Sistemul pe care urmeaz s fie executat aplicaia const din P procesoare. Spre deosebire de majoritatea
sistemelor de acest fel, ns, cele P procesoare au viteze de execuie diferite. Primul procesor este un
Pentium IV i este cel mai rapid. Al doilea procesor este de dou ori mai lent dect primul, al treilea de trei
ori mai lent al i-lea procesor este de i ori mai ncet dect primul. n aceste condiii, timpul de execuie al
fiecrui fragment de cod difer, n funcie de procesorul pe care va fi executat. S prespunem c un segment
de cod are timpul de execuie T (unde T este 1 sau 2) pe primul procesor. Atunci pe un procesor i, timpul
su de execuie va fi i*T.

Cerin
tiind c fragmentele de cod pot fi executate n orice ordine i pe orice procesor i c orice procesor poate
executa, la un moment dat, un singur fragment de cod, determinai timpul minim dup care se va termina
execuia aplicaiei (adic a tuturor fragmentelor de cod). Timpul dup care se termin aplicaia este egal cu
maximul dintre timpii dup care fiecare procesor redevine disponibil. Timpul dup care un procesor redevine
disponibil este egal cu suma timpilor de execuie a fragmentelor de cod rulate pe procesorul respectiv.

Date de intrare
Prima (i singura) linie a fiierului de intrare proc.in conine trei numere ntregi, separate prin spaii: N
numrul de fragmente de cod, K numrul de fragmente de cod care au timpul de execuie pe un Pentium IV
egal cu 1 (implicit, N-K au timpul de execuie egal cu 2) i P numrul de procesoare ale sistemului.

Date de ieire
Fiierul proc.out va conine o singur linie pe care se afl timpul minim dup care se termin de executat
aplicaia.

Restricii i precizri
0 K N 1 000 000 000
1 P 65 535
Cel puin 40% din teste vor avea N 2 000 i P 2 000.
Cel puin 70% din teste vor avea N 65 535 i P 16 383.

Exemplu
proc.in proc.out
4 3 2 4

Explicaie
Pe primul procesor se execut un fragment de cod cu timpul de execuie (calculat pe un Pentium IV) egal cu
1 i un fragment de cod cu timpul de execuie egal cu 2 => timpul dup care acest procesor devine
disponibil este 1*1 + 1*2 = 3. Pe al doilea procesor se execut dou fragmente de cod cu timpul de
execuie (calculat pe un Pentium IV) egal cu 1 => timpul dup care acest procesor devine disponibil este 2
[numrul de fragmente] * (2*1) [timpul de execuie al fiecrui fragment pe procesorul 2] = 4.

Timp maxim de execuie: 0.2 secunde/test pentru Linux i 1.5 secunde/test pentru Windows.

S-ar putea să vă placă și