Sunteți pe pagina 1din 51

Antene 100 puncte

Baraj

Firmele de telefonie mobil Dialog si Connex urmeaz s-si instaleze antene satelit ntr-un
spatiu comun. n acest scop, se realizeaz o hart sub forma unui caroiaj dreptunghiular, unde
se dau N puncte prin coordonate naturale, reprezentnd punctele n care vor fi instalate antene
pentru cele dou firme. Managerul Oficiului Concurentei doreste ca nici una din firme s nu
fie dezavantajat. Astfel, ea stabileste urmtoarea conditie care trebuie s fie respectat:
-orice dreapt paralel cu axa Ox sau Oy trasat printr-un punct de coordonate naturale
intersecteaz un numr de antene ale firmei Connex, numr care difer cu cel mult 1 de
numrul de antene ale firmei Dialog intersectate de aceeasi dreapt. Altfel spus, modulul
diferentei dintre numrul antenelor Connex si numrul antenelor Dialog situate pe aceeasi
dreapt este cel mult 1.

Cerint: Cunoscndu-se coordonatele celor N puncte, s se realizeze o distribuire a tuturor


punctelor ntre cele dou firme, astfel nct restrictia impus de managerul Oficiului
Concurentei s fie respectat.

Date de intrare:
Prima linie a fisierului de intrare ANTENE.IN contine numrul de puncte (N).
Pe fiecare din urmtoarele N linii sunt scrise cte dou numere x y, desprtite printr-un
spatiu, reprezentnd coordonatele fiecrui punct n care se va instala o anten.
Coordonatele punctelor sunt numere naturale cuprinse ntre 0 si 30000.

Date de iesire: Fisierul de iesire ANTENE.OUT va contine N linii:

pe fiecare linie se vor scrie trei numere desprtite prin cte un spatiu: x y c; primele
dou numere (x, y) reprezint coordonatele unui punct din caroiajul dat, n care este
permis amplasarea unei antene, iar ultimul numr (c) va avea valoarea 1 dac n acel
punct s-a amplasat antena firmei Dialog, respectiv -1 dac s-a amplasat antena firmei
Connex.
ordinea de scriere a punctelor n fisierul de iesire poate fi oarecare.

Restrictie: N <= 8000

Exemplu
ANTENE.IN ANTENE.OUT
6 131
41 2 3 -1
32 241
13 3 4 -1
23 411
24 321
34

Timp maxim de executie: 2 secunde/test

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Mosteniri duble 100
puncte

Baraj

Ministrul de Finante din Simot a decis s pun impozit pe mostenirile duble.


n registrul de stare civil (cu ajutorul cruia se va stabili cte impozite se pot ncasa) apar n
persoane, numerotate de la 1 la n.
O persoan care nu figureaz ca mostenitor al nici unei persoane este denumit strmos.
O persoan care este mostenitor direct al cuiva, dar nu are nici un mostenitor (direct sau
indirect) este denumit terminal.
Celelalte persoane care mostenesc de la una sau mai multe persoane si au unul sau mai multi
mostenitori sunt denumiti tranzienti.
Numim succesiune de mostenitori o secvent de persoane p1, p2, ..., pk, unde p1 este strmos,
p2, ..., pk-1 sunt tranzienti, pk este terminal, iar pi este mostenitorul direct al lui pi-1, pentru
oricare i{2,...,k}.
Se impoziteaz doar persoanele terminale, beneficiare de mosteniri duble, stiind c o
persoan plteste cte un impozit pentru fiecare mostenire dubl. Numim mostenire dubl a
unui terminal dou succesiuni distincte de mostenitori care au acelasi strmos. Se consider
c dou succesiuni sunt distincte dac exist cel putin o persoan tranzient care apare ntr-o
succesiune si nu apare n cealalt.
Dac persoana i este mostenitorul direct sau indirect al persoanei j, nu se poate ntmpla ca
persoana j s fie mostenitor direct sau indirect al persoanei i.

Cerint: Scrieti un program care stabileste numrul total de impozite care pot fi ncasate.

Date de intrare: Prima linie a fisierului de intrare MOST.IN contine numrul de persoane n.
De pe urmtoarele n linii se citesc, pentru fiecare persoan numerele de ordine ale
persoanelor de la care persoana respectiv a mostenit direct (de pe linia i+1 se citesc
numerele de ordine ale persoanelor de la care a mostenit direct persoana i). Fiecare linie se
termin cu zero.

Date de iesire: n fisierul de iesire MOST.OUT se va scrie numrul total de impozite.

Restrictie: N <= 200

Exemplul 1
MOST.IN MOST.OUT
14 5
0
0
0
0
10
50
80
120
130

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
340
6 7 12 0
90
10 0
7 12 13 0
Explicatie: Sunt 5 impozite pe 5 mosteniri duble. Primul impozit l plteste persoana 11 care
a mostenit de la persoanele 6 si 7 (care au persoana 1 ca strmos). Al doilea impozit l
plteste tot persoana 11 datorit mostenirilor de la persoanele 6 si 12 (care au persoana 1 ca
strmos). Al treilea impozit l va plti tot persoana 11 datorit mostenirilor primite de la
persoanele 7 si 12 (care au pe persoana 1 ca strmos). Al patrulea impozit l plteste persoana
14 care a mostenit de la persoanele 7 si 12 (care au persoana 1 ca strmos). Al cincelea
impozit, l plteste tot persoana 14 care mosteneste de la persoanele 12 si 13 (care au
persoana 3 ca strmos).

Exemplul 2
MOST.IN MOST.OUT
14 0
0
0
0
0
10
50
80
20
30
40
670
90
10 0
12 13 0

Exemplul 3
MOST.IN MOST.OUT
4 1
0
10
120
30
Explicatie: Impozitul este pltit de persoana 4 pentru care cele dou succesiuni distincte
sunt: 1, 2, 3, 4 si 1, 3, 4, strmosul comun fiind persoana 1.

Timp maxim de executie: 2 secunde/test

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Multiplu 100 puncte

Baraj

Se d un numr natural n si k cifre distincte nenule.

Cerint:
S se gseasc cel mai mic numr natural m, multiplu al lui n, format numai cu cifrele date.

Date de intrare:
Prima linie a fisierului de intrare MULTIPLU.IN contine valorile n si k separate printr-un
spatiu.
A doua linie contine cele k cifre separate prin cte un spatiu.

Date de iesire:
Dac problema are solutie, n fisierul MULTIPLU.OUT se va scrie numrul m. n cazul n
care nu exist solutie, n fisierul MULTIPLU.OUT se va scrie mesajul NU.

Restrictie:
1 <= n <= 10000, 1 <= k <= 9

Exemplul 1
MULTIPLU.IN MULTIPLU.OUT
3458 4 31122
1352

Exemplul 2
MULTIPLU.IN MULTIPLU.OUT
15 5 NU
13479

Timp maxim de executie: 1 secund/test

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Parantezri 100
puncte

Baraj

Se consider multimea sirurilor de N perechi de paranteze rotunde mperecheate corect.


Aceast multime se consider ordonat lexicografic cresctor, stiind c '(' < ')'.

Cerint:
Dndu-se un sir de paranteze se cere s se determine numrul lui de ordine, stiind c prima
configuratie
(((...(())...)))
are numrul de ordine 1.

Date de intrare:
Prima linie a fisierului de intrare PAR.IN contine numrul N, iar a doua linie contine sirul de
paranteze.

Date de iesire:
n fisierul de iesire PAR.OUT se va scrie un numr ntreg. Acest numr trebuie s reprezinte
numrul de ordine al parantezrii date, n sirul ordonat lexicografic cresctor al tuturor
parantezrilor corecte formate din N perechi de paranteze.

Restrictie: 1 <=n <=30

Exemplul 1
PAR.IN PAR.OUT
3 1
((()))
Exemplul 2
PAR.IN PAR.OUT
4 14
()()()()
Exemplul 3
PAR.IN PAR.OUT
2 2
()()
Exemplul 4
PAR.IN PAR.OUT
4 13
()()(())

Timp maxim de executie: 1 secund/test

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Solitaire 100 puncte

Baraj

Un juctor solitar a inventat urmtorul joc. El deseneaz pe o foaie de hrtie n puncte.


Jocul const n construirea unor segmente dup urmtoarele reguli:
- orice segment uneste dou din cele n puncte;
- orice punct poate s fie extremitatea a cel mult un segment si nu poate s apartin
interiorului segmentelor;
- oricare dou segmente nu se intersecteaz;
- jocul continu pn cnd nu se mai poate trasa nici un astfel de segment.
Scopul jocului este de a trasa segmente astfel nct, n final, numrul de puncte rmase izolate
(care nu reprezint extremittile unor segmente) s fie minim.

Cerint: Scrieti un program care s joace acest joc.

Date de intrare: Din fitierul de intrare JOC.IN se citesc:


n - numrul de puncte;
x1 y1 - coordonatele carteziene ale primului punct;
x2 y2 - coordonatele carteziene ale celui de-al doilea punct;
...
xn yn - coordonatele carteziene ale punctului n.

Date de ietire: Rezultatele se vor scrie n fitierul JOC.OUT sub forma:


P - numrul de puncte rmase izolate;
K - numrul de segmente construite;
x11 y11 x12 y12 - coordonatele carteziene ale extremittilor primului segment;
x21 y21 x22 y22 - coordonatele extremittilor celui de-al doilea segment;
...
xk1 yk1 xk2 yk2 - coordonatele carteziene ale extremittilor segmentului k.

Restrictie: n <= 200

Timp maxim de executie: 1 secund/test

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Vntorii 100
puncte

Baraj

Cristi si Marius s-au hotrt ntr-o zi s se duc la vntoare. Cristi are o pusc destul de
prpdit cu care poate vna doar lupi. Marius n schimb, care tocmai si-a luat bursa, are o
pusc performant cu care poate vna si lupi si mistreti. Ajunsi n pdure, ei si dau seama c
vntoarea nu e treab usoar; ei trebuie s alerge mult dup fiecare animal. Avnd la
dispozitie un numr de doar T minute alocate pentru vntoare si dorind s vneze n acest
timp ct mai multe animale (lupi si mistreti) ei au calculat, pe baza unor informatii date de
pdurar, cte minute trebuie s alerge dup fiecare animal n parte.

Cerint:
Scrieti un program care determin cte animale trebuie s vneze Cristi si Marius pentru ca
mpreun s aduc acas un numr maxim de animale.

Date de intrare:
Prima linie a fisierului de intrare VANATORI.IN contine numrul T, reprezentnd durata
maxim a vntorii.
Pe cea de-a doua linie sunt scrise dou numere L si M, reprezentnd numrul de lupi
respectiv de mistreti, desprtite printr-un spatiu.
Pe cea de-a treia linie se gsesc L numere ntregi, fiecare numr t i (i=1,L) reprezentnd
timpul n care poate fi vnat fiecare dintre cei L lupi.
Cea de-a patra linie contine M numere ntregi, fiecare numr u i (i=1,M) reprezentnd timpul
n care poate fi vnat fiecare dintre cei M mistreti.

Date de iesire:
Pe prima linie a fisierului de iesire VANATORI.OUT se va scrie un singur numr,
reprezentnd numrul maxim de animale pe care le pot vna Marius si Cristi.

Restrictii: 1 <= T <= 300 ; 0 <= L <= 600; 0 <= M <= 600 ; 0 <= ti,ui <= T

Exemplu:
VANATORI.IN VANATORI.OUT
5 5
42
2112
54

Explicatie : Cristi vneaz primul, al doilea si al patrulea lup, iar Marius al treilea lup si al
doilea mistret.
Timp maxim de executie : 10 secunde/test

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Olimpiada Naional de Informatic

James Bond Baraj

Un grup de teroristi s-a ascuns ntr-un sistem de canalizare. James Bond, avnd la
dispozitie o harta care descrie configuratia sistemului de canalizare si pozitiile n care
teroristii au amplasat bombe, vrea sa anihileze grupul de teroristi.
Conductele din acest sistem sunt desenate pe harta sub forma unor segmente de
dreapta n plan, astfel nct oricare doua segmente au cel mult un punct comun, care este
capat pentru amndoua segmentele.
Explozia unei bombe afecteaza o zona circulara (interior si frontiera) si este
instantanee pe ntreaga zona afectata. Bombele pot sa difere una de cealalta prin raza de
actiune sau prin timpul la care explodeaza. n urma unei explozii, canalele care trec prin zona
de actiune a bombei devin impracticabile pe segmentul afectat, dar, daca Bond se afla ntr-un
astfel de canal si a trecut deja de zona afectata de explozie, poate sa-si continue drumul. Daca
James Bond se afla n raza de actiune a unei bombe la momentul exploziei, el moare!
La momentul initial (momentul 0), James Bond porneste dintr-un punct al sistemului
de canalizare (capat al unui segment) si se deplaseaza cu viteza constanta, egala cu 1. James
Bond trebuie sa ajunga n punctul n care se afla teroristii (capat al unui segment) n cel mai
scurt timp posibil.

Cerinta: Determinati calea pe care trebuie s-o urmeze James Bond astfel nct sa ajunga viu
la teroristi n cel mai scurt timp.

Date de intrare: Fisier de intrare: BOND.IN


Linia 1: M N
doua numere ntregi, pozitive, separate printr-un spatiu, reprezentnd numarul de
conducte si numarul de bombe;
Liniile 2..M+1: X1 Y1 X2 Y2
aceste M linii contin fiecare cte patru numere ntregi, separate prin cte un spatiu,
reprezentnd descrierea segmentelor prin coordonatele extremitatilor;
Liniile M+2..M+N+1: XC YC R T
aceste N linii contin fiecare cte patru numere ntregi, separate prin cte un spatiu,
reprezentnd descrierea bombelor prin coordonatele punctului unde sunt amplasate,
raza cercului pe care actioneaza si momentul de timp la care actioneaza;
Linia M+N+2: XP YP
doua numere ntregi, separate printr-un spatiu, reprezentnd coordonatele punctului de
plecare, capat al unui segment;
Linia M+N+3: XD YD
doua numere ntregi, separate printr-un spatiu, reprezentnd coordonatele punctului n
care se afla teroristii, capat al unui segment.

Date de iesire: Fisier de iesire: BOND.OUT


Linia 1: TMIN
numar real pozitiv, reprezentnd timpul minim n care James Bond ajunge la teroristi;
Liniile 2...: C1 C2

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
pe urmatoarele linii, pna la sfrsitul fisierului se vor scrie cte doua numere ntregi,
separate printr-un spatiu, reprezentnd coordonatele capetelor de segmente prin care
va trece James Bond.
Restrictii
1 M 100
0 N 50
1 R 30000
0 T 30000
Coordonatele capetelor segmentelor si ale pozitiilor bombelor apartin intervalului[-
30000, 30000].
Exemplu:
BOND.IN BOND.OUT

3 1 20
0 0 10 0 0 0
0 0 10 10 10 0
10 0 10 10 10 10
6 4 2 1
0 0
10 10

Observatii
n procesul de verificare se vor lua n considerare partea ntreaga si primele 2 cifre zecimale.
Pentru datele de test se garanteaza existenta solutiei.
Datele de intrare sunt corecte.

Timp maxim de executare/test: 1 secunda

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Olimpiada Naional de Informatic

Descompuneri Baraj

Se dau numerele naturale nenule N, K i X. Numim o K-descompunere a lui N un sir strict


crescator de K numere naturale nenule, a caror suma este N.
Dintre toate K-descompunerile lui N, s se determine n cte apare numrul X.

Date de intrare:
Fiier de intrare: DESCOMP.IN
Linia 1: N K X
trei numere naturale nenule, separate prin cte un spaiu, avnd semnificaia din
enun.

Date de iesire:
Fiier de ieire: DESCOMP.OUT
Linia 1: NR
numr natural, reprezentnd numrul descompunerilor respectnd cerinele problemei.

Restrictii:
2 <= N 350

Exemplu:

DESCOMP.IN
12 3 2

DESCOMP.OUT
3

Explicaii:
12=1+2+9
12=2+3+7
12=2+4+6

Timp maxim de executare/per test: 1 secund

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Olimpiada Naional de Informatic

Deert Baraj

Se d o imagine alb-negru care reprezint fotografia, realizat din satelit, a unei zone dintr-un
deert.
n aceast zon se caut o construcie secret de form dreptunghiular. Imaginea poriunii de
deert analizate a fost codificat ntr-o matrice avnd dimensiunile maxime de N255
elemente. Imaginea construciei este codificat ntr-o matrice avnd K32 elemente.
Elementele celor dou matrice pot fi numai caracterele . i #.

Cerin: Determinai de cte ori se regsete fotografia construciei pe hart.

Date de intrare: Fiier de intrare: DESERT.IN


Linia 1: N K
dou numere naturale nenule, N reprezentnd numrul de linii al matricei care
codific fotografia deertului, iar K numrul de linii al matricei ptratice care codific
fotografia construciei;
Liniile 2K+1: ci,1 ci,2 ci,32
aceste K linii conin n form codificat matricea fotografiei construciei (32 caractere
# i . Neseparate prin spaii);
Liniile K+2K+N+1: di,1 di,2 di,255
aceste N linii conin n form codificat matricea fotografiei deertului (255 caractere
# i . Neseparate prin spaii);

Date de iesire: Fiier de ieire: DESCOMP.OUT


Linia 1: NR
numr natural, reprezentnd numrul de potriviri ale matricei fotografiei construciei
n maricea fotografiei deertului.

Restrictii:
3 N 1024
1<K<N
Fotografia construciei nu se va roti i nu se va oglindi.

Exemplu:
DESERT.IN DESERT.OUT
3 2 2
#....(n total 31 puncte).
#....(n total 31 puncte).
#.........(n total 254 puncte).
#.........(n total 254 puncte).
#.........(n total 254 puncte).

Timp maxim de executare/per test: 1 secund

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Olimpiada Naional de Informatic

Potrivire Baraj

Se consider dou numere naturale nenule N i S.

Cerin: Determinai numerele distincte x1 , x2 , , xN aparinnd mulimii {1, 2, , N}


astfel nct 1x1+2x2+NxN=S.

Date de intrare: Fiier de intrare: POTRIV.IN


Linia 1: N S
dou numere naturale nenule, separate printr-un spaiu, reprezentnd numrul dat,
respectiv suma dat.

Date de iesire: Fiier de ieire: POTRIV.OUT


Linia 1: x1 x2 xN
N numere naturale nenule, separate prin cte un spaiu, reprezentnd soluia
problemei. Dac nu exist soluie, pe aceast linie se va scrie numrul 0.

Restrictii:
3 < N 1000
0 < S 333834000
Dac exist mai multe soluii, n fiier se va scrie una singur.

Exemplu:
POTRIV.IN POTRIV.OUT
4 26 3214

Explicaie: 13 + 22 +31 +44 = 26

Timp maxim de executare/per test: 1 secund

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Olimpiada Naional de Informatic

Siruri Baraj

Se dau doua siruri avnd amndoua cte N numere naturale, cuprinse ntre 1 si N/2 (N este
par). Fiecare numar ntre 1 si N/2 apare de exact doua ori n fiecare dintre cele doua siruri.

Cerinta
Determina i subsirul comun avnd lungimea maxima.

Date de intrare
Fisier de intrare: SIRURI.IN
Linia 1: N
numar natural nenul avnd semnificatia din enunt;
Linia 2: a1 a2 a3 . . . aN
N numere naturale nenule, separate prin cte un spatiu, reprezentnd elementele primului
sir;
Linia 3: b1 b2 b3 . . . bN
N numere naturale nenule, separate prin cte un spatiu, reprezentnd elementele celui de-al
doilea sir.

Date de iesire
Fisier de iesire: SIRURI.OUT
Linia 1: NR
Numarul de elemente al subsirului comun.
Linia 2: c1 c2 c3 . . . cNR
NR numere naturale nenule, reprezentnd subsirul comun de dimensiune maxima.

Restrictii
0 < N 15000
N este numar par

Exemplu
SIRURI.IN SIRURI.OUT

10 5
3 5 4 4 2 5 2 3 1 1 4 2 2 3 1
1 4 2 2 3 4 5 5 3 1

Timp maxim de executie/test: 1 secunda

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Olimpiada Naional de Informatic

Tort Baraj

Gigel a primit de ziua lui un tort dreptunghiular pe care mama lui a desenat un caroiaj. n
mijlocul anumitor ptrele sunt aezate bezele, una ntr-un ptrel. Gigel ar vrea s mnnce ct
mai multe bezele, dar tatl lui a inventat o mecherie prin care sper s reduc pofta de bezele a
lui Gigel.
Gigel a primit i o mulime de buci de ciocolat. Tatl lui i cere s nlocuiasc bezelele
pe care vrea s le mnnce cu buci de ciocolat, formate din dou ptrele. Gigel trebuie s
nlocuiasc ntotdeauna cte dou bezele (vecine pe orizontal sau vertical), fr a suprapune
bucile de ciocolat.

Cerin: tiind c exist suficiente buci de ciocolat, ajutai-l pe Gigel s nlocuiasc ct mai
multe bezele, respectnd regulile impuse de tatl su.

Date de intrare: Fiier de intrare: TORT.IN


Linia 1: M N
dou numere naturale nenule, separate printr-un spaiu, reprezentnd dimensiunile
caroiajului de pe tort;
Liniile 2M+1: ti,1 ti,2 ti,N
aceste M linii conin codificarea caroiajului de pe tort, linie dup linie: valoarea 1
reprezint o bezea, 0 nseamn c n ptrelul respectiv nu exist bezea; ntre dou valori
numerice exist un singur spaiu.

Date de iesire: Fiier de ieire: TORT.OUT


Linia 1: K
numr natural, reprezentnd numrul bucilor de ciocolat (o bucat de ciocolat este
format din dou ptrele, deci va nlocui dou bezele); acest numr trebuie s fie cel mai
mare posibil, respectnd cerinele problemei; o bucat de ciocolat, format din dou
ptrele nu se poate rupe;
Liniile 2M+1: Xi Yi Di
aceste K linii conin cte dou numere naturale nenule i un caracter, separate prin cte un
spaiu, care descriu amplasarea unei buci de ciocolat; Xi i Yi sunt coordonatele
ptrelului stnga sus, iar Di identific poziia celuilalt ptrel al bucii astfel: este E
(Est) sau S (Sud), dup cum al doilea ptrel se afl la dreapta primului sau sub primul.
Restrictii:
1 < M,N 100
o bucat de ciocolat trebuie s nlocuiasc exact dou bezele
bucile de ciocolat nu se pot suprapune
ordinea n fiierul de ieire a descrierii ucilor de ciocolat poate fi oarecare
Exemplu:
DESERT.IN DESERT.OUT
4 3 3
101 22S
010 31S
110 42E
111
Timp maxim de executare/per test: 1 secund
Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta
Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
OLIMPIADA NAIONAL DE INFORMATIC
OLIMPIADA NAIONAL
BRILA DE INFORMATIC
26 APRILIE 03 MAI 2002
BRILA 26 APRILIE 03 MAI 2002
BARAJ
BARAJ Sursa: BANANA.pas, BANANA.c, BANANA.cpp
Intrare: BANANA.in
Ieire: BANANA.out
Banana
Se consider o pdure tropical, reprezentat sub forma unui caroiaj dreptunghiular. Celula din colul
stnga sus al caroiajului are coordonatele (1, 1), iar coordonatele celorlalte celule sunt determinate de
linia i coloana pe care se afl. n anumite celule ale caroiajului sunt plasai bananieri; o celul conine cel
mult un bananier. Mai muli bananieri care se nvecineaz pe orizontal sau vertical formeaz o zon de
bananieri. ntr-o astfel de zon, CEKILI se deplaseaz uor, cu agilitatea-i cunoscut, de la un bananier
la altul.
Maimua CEKILI este lacom i nu i ajung bananele dintr-o singur zon. Tarzan vrea s-i ajute
prietena. Pentru aceasta, el ar putea conecta exact K zone de bananieri nnodnd mai multe liane i astfel
CEKILI s-ar putea deplasa de la o zon la alta utiliznd lianele. Evident, Tarzan trebuie s aleag zonele
astfel nct numrul total de bananieri din cele K zone s fie maxim.
Cerin
Determinai numrul maxim de bananieri care se poate obine prin conectarea a exact K zone.
Date de intrare
Fiierul de intrare BANANA.IN conine:
BANANA.IN Semnificaie
Nr K Nr numrul de bananieri
x1 y1 K numrul de zone ce pot fi conectate
x2 y2 xi linia pe care se afl bananierul i
... yi coloana pe care se afl bananierul i
xNr yNr

Date de ieire
Fiierul de ieire BANANA.OUT va conine pe prima linie numrul maxim de bananieri care se poate
obine prin conectarea zonelor.
Restricii
1 Nr 16 000
1 xi, yi 10 000, i {1,2,...,Nr}
n testele utilizate K nu va depi numrul de zone.
Dou poziii se nvecineaz pe orizontal dac sunt pe aceeai linie i pe coloane consecutive,
respectiv pe vertical dac sunt pe aceeai coloan i pe linii consecutive.

Exemplu
BANANA.IN BANANA.OUT
10 3 9
7 10
1 1
101 1
2 2
102 1
7 11
200 202
2 1
3 2
103 1
Timp maxim de executare: 1 secund/test

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
OLIMPIADA NAIONAL DE INFORMATIC
BRILA 26 APRILIE 03 MAI 2002

BARAJ
Sursa: FOTBAL.pas, FOTBAL.c, FOTBAL.cpp
Intrare FOTBAL.in
Fotbal Ieire: FOTBAL.out

La un Campionat Mondial de Fotbal la care particip n echipe, numerotate de la 1 la n, urmeaz s se


desfoare dup sistemul turneu (fiecare cu fiecare) pe parcursul a n-1 etape. Comitetul de organizare
decide ca toate meciurile dintr-o etap s nceap n aceeai zi i la aceeai or, iar n fiecare etap s joace
toate echipele.
n ara organizatoare nu exist dect n-1 orae, numeroate de la 1 la n-1, care dein cte un stadion ce
poate gzdui partide de fotbal, iar primarii din fiecare dintre aceste orae doresc sa vad jucnd fiecare
echip participant la Campionat pe stadionul oraului pe care l conduc.

Cerin
Din diverse motive, organizatorii nu pot refuza aceast dorin a primarilor, aa c v roag s-i ajutai
pentru a putea realiza programul de desfurare a campionatului n condiiile de mai sus. Acest program
trebuie s precizeze ce meciuri se desfoar n fiecare etap i oraele n care au loc respectivele meciuri.

Date de intrare
Pe prima linie a fiierului FOTBAL.IN se afl valoarea lui n.

Date de ieire
Fiierul FOTBAL.OUT va conine n-1 linii. Pe linia i vor fi descrise meciurile din cadrul etapei i, prin
n/2 triplete de forma a b c cu semnificaia: meci ntre echipele a i b n oraul c. ntre numerele ce
alcatuiesc un triplet se va lsa minim un spaiu, iar ntre triplete se va lsa de asemenea minim un spaiu.
Dac nu este posibil programarea meciurilor conform restriciilor impuse se va afia pe prima linie a
fiierului de ieire cuvntul NU.

Restricii
1 n 30, n par

Exemplu
FOTBAL.IN
8

FOTBAL.OUT
1 8 1 2 7 3 3 6 5 4 5 2
1 3 4 2 8 2 4 7 6 5 6 3
1 5 7 2 4 5 3 8 3 6 7 4
1 7 5 2 6 1 3 5 6 4 8 4
1 2 6 3 7 2 4 6 7 5 8 5
1 4 3 2 3 7 5 7 1 6 8 6
1 6 2 2 5 4 3 4 1 7 8 7

Semnificaie: exist 8 echipe, deci 7 orae. Schema de desfurare a concursului poate fi: n etapa 1 se
ntlnesc echipele 1 cu 8 n oraul 1, 2 cu 7 n oraul 3, 3 cu 6 n oraul 5 i 4 cu 5 n oraul 2 etc.)

Observaii
Chiar dac exist mai multe soluii, se va afia una singur.
Ordinea n care sunt afiate meciurile n cadrul unei etape nu conteaz.

Timp maxim de execuie/test: 2 secunde

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
OLIMPIADA NAIONAL DE INFORMATIC
BRILA 26 APRILIE 03 MAI 2002

BARAJ Sursa: GARD.pas, GARD.c, GARD.cpp


Intrare: GARD.in
Gard Ieire: GARD.out
O echip de K muncitori a fost angajat s vopseasc un gard format din N scnduri numerotate de la 1
la N, de la stnga spre dreapta. Fiecare muncitor i (1 i K) se aeaz n faa scndurii Si i poate vopsi
numai un interval compact (adic numerele de ordine ale scndurilor din interval sunt consecutive) avnd
maxim Li scnduri, interval care trebuie s conin scndura Si. Pentru fiecare scndur vopsit, acesta
este pltit cu suma Pi. Din motive de eficien, oricare 2 muncitori din echip trebuie s vopseasc
intervale de scnduri disjuncte (adic oricare scndur a gardului poate fi vopsit de cel mult un membru
al echipei).
Fiind conductorul echipei de muncitori, dumneavoastr dorii s determinai pentru fiecare membru
al echipei intervalul de scnduri pe care acesta va trebui s l vopseasc, astfel nct ctigul total s fie
maxim. Ctigul total este egal cu suma ctigurilor realizate de fiecare membru al echipei. Ctigul
realizat de fiecare muncitor este egal cu numrul de scnduri vopsite de acesta nmulit cu Pi (pentru
muncitorul cu numrul i).

Cerin
Scriei un program care determin ctigul maxim obinut de cei K muncitori.
Date de intrare
Fiierul de intrare GARD.IN conine:
GARD.IN Semnificaie
N K N numrul de scnduri; K numrul de muncitori
L1 P1 S1 Li numrul maxim de scnduri ce pot fi vopsite de muncitorul cu numrul i
L2 P2 S2 Pi suma primit de muncitorul i pentru fiecare scndur vopsit de acesta
... Si scndura din gard n faa creia se aeaz muncitorul i
LK PK SK

Date de ieire
n fiierul GARD.OUT vei afia ctigul maxim obinut de ntreaga echip de muncitori.
Restricii i precizri
1 N 16 000
1 K 100
1 Pi 10 000
1 Li , Si N
Toate numerele Si vor fi distincte.
Nu trebuie vopsite neaprat toate cele N scnduri ale gardului.
Este permis ca unul sau mai muli dintre membrii echipei s nu vopseasc nici o scndur, caz n care
scndura n faa creia s-au aezat iniial poate fi vopsit, eventual, de ctre alt muncitor.
Dac problema este rezolvat corect pentru N 1000 (i orice valoare a lui K), se poate obine cel puin
50% din punctajul total.
Exemplu
GARD.IN GARD.OUT Explicaie
8 4 17 muncitorul 1 vopsete intervalul de scnduri [1, 2];
3 2 2 muncitorul 2 vopsete intervalul de scnduri [3, 4];
3 2 3 muncitorul 3 vopsete intervalul de scnduri [5, 7];
3 3 5 muncitorul 4 nu vopsete nici o scndur.
1 1 7

Timp maxim de execuie: 1 secund/test


Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta
Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
OLIMPIADA NAIONAL DE INFORMATIC
BRILA 26 APRILIE 03 MAI 2002

BARAJ Sursa: LABIRINT.pas, LABIRINT.c, LABIRINT.cpp


Intrare: LABIRINT.in
Labirint Ieire: LABIRINT.out
Romeo i Julieta sunt prini ntr-un labirint, dat sub forma unei matrice cu M linii i N coloane, cu elemente 0
i 1. Un element 1 reprezint zid, iar 0 reprezint spaiu liber. Romeo i Julieta se afl iniial n ptratelele (1,1)
(Romeo) respectiv (M,N) (Julieta) ale matricei, care conin 0, se pot deplasa numai pe ptratele care conin 0 i nu
pot prsi matricea.
Pentru a evada din labirint, Romeo trebuie s ajung n ptrelul (i1,j1), iar Julieta n (i2,j2). Ei ncearc s
fac asta conform indicaiilor date de dumneavoastr, participant la Olimpiada Naional de Informatic.
Dumneavoastr dispunei de un ir de mutri pe care cei doi le pot efectua. irul este format din K mutri,
codificate prin literele N, E, S i V, reprezentnd deplasri de un ptrel spre Nord, Est, Sud, respectiv Vest.
Romeo i Julieta trebuie s efectueze TOATE mutrile din acest ir, N ORDINEA DAT.
Dumneavoastr suntei cel care decide dac o anumit mutare va fi efectuat de Romeo sau de Julieta.
Se tie c irul de mutri permite ajungerea celor doi la destinaii. Dac reuii s-l folosii n acest scop, fr a
nclca restriciile impuse de labirint, primii puncte la Olimpiad!
Cerin
Scriei un program care va decide care dintre mutri vor fi efectuate de Romeo i care de Julieta pentru a-i
ajuta pe cei doi s ajung la destinaii.
Date de intrare
Fiierul de intrare LABIRINT.IN are urmtoarea structur:
pe prima linie numerele M i N;
pe urmtoarele M linii descrierea labirintului. Pe linia i+1 se afl descrierea liniei i a labirintului, codificat
prin N numere 0 sau 1, separate prin cte un spaiu;
pe urmtoarea linie valorile i1 j1 i2 j2;
pe urmtoarea linie numrul K de mutri care trebuie efectuate;
pe urmtoarea linie un ir de K litere, fiecare litera fiind N, E, S sau V, cu semnificaiile de mai sus.
Date de ieire
n fiierul de ieire LABIRINT.OUT se va afia o singur linie, coninnd K caractere R sau J. Al i-lea
caracter este R dac Romeo va efectua a i-a mutare sau J dac mutarea va fi efectuat de Julieta.
Restricii i precizri
3 M 20;
3 N 60;
1 K 200.
Toate testele vor avea cel puin o soluie. Dac exist mai multe soluii, se va afia una dintre ele.
Prin deplasare la Nord se nelege deplasarea pe linia precedent, o deplasare la Sud nseamn deplasarea pe
linia urmtoare, deplasarea la Vest nseamn deplasarea pe coloana precedent, iar deplasarea la Est nseamn
deplasarea pe coloana urmtoare.
Exemplu
LABIRINT.IN LABIRINT.OUT
5 5 RJRRJR (sau RJRRRJ)
0 0 1 0 0
0 0 0 1 1
0 0 0 0 0
1 0 0 0 0
0 1 0 0 0
2 2 4 4
6
SNEEVV

Timp maxim de executare: 1 secund/test


Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta
Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
OLIMPIADA NAIONAL DE INFORMATIC
BRILA 26 APRILIE 03 MAI 2002

BARAJ Sursa: MONEDE.pas, MONEDE.c, MONEDE.cpp


MONEDE
Se consider N monede identice ca form i culoare, numerotate de la 0 la N-1. Printre ele exist
exact o moned fals. Toate monedele adevrate au aceeai greutate, cea fals fiind mai grea sau mai
uoar dect celelalte. Pentru gsirea monedei false se folosete o balan cu dou talere identice, pe care
ncap oricte monede. O cntrire folosind aceast balan const n a pune pe cele dou talere ale
balanei cte un numr egal de monede. n urma cntririi se determin dac greutile de pe talere sunt
egale sau talerul care conine o greutate mai mare.
Cerin
Scriei un program care s comande cntririle care trebuie efectuate astfel nct s se determine
moneda fals i dac este mai grea sau mai uoar dect cele adevrate, n numr minim de cntriri.
Pentru a afla numrul de monede i rezultatul cntririlor programul va trebui s foloseasc un modul
ajuttor.
Restricii
3 N 1000
Instruciuni pentru programatorii n C/C++
Vei avea la dispozitie header-ul mon.h n care este definit urmtorul tip:
typedef char taler[1000];
i urmtoarele funcii:
int init();
int cantarire(taler stanga, taler dreapta);
void rezultat(int moneda, int tip);
Instruciuni pentru programatorii n Pascal
Vei avea la dispoziie unit-ul MON n care este definit urmtorul tip:
taler=array[0..999] of byte;
i urmtoarele funcii:
function init: integer;
function cantarire(var stanga, dreapta: taler): integer;
procedure rezultat(moneda, tip: integer);
Instruciuni de utilizare a modulului
Tipul taler este folosit pentru a reprezenta monedele de pe un taler al balanei. Un vector de tipul
taler va conine doar 0 i 1. Un vector de tipul taler conine pe o poziie valoarea 1 dac i numai
dac moneda cu numrul corespunztor se afl n balan pe talerul reprezentat prin vector i 0 altfel.
Prima funcie care trebuie apelat este init, funcie care ntoarce numrul de monezi.
n continuare va fi apelat, de cte ori este nevoie, funcia cantarire, avnd ca parametri
configuraiile celor dou talere. Funcia ntoarce 0 dac talerele sunt echilibrate, -1 dac talerul din
stnga este mai uor, respectiv 1, dac talerul din stnga este mai greu.
Procedura/funcia rezultat va fi apelat la sfrit pentru a anuna moneda fals. Primul parametru
este numrul monedei false, iar al doilea trebuie s fie -1 dac moneda fals este mai uoar dect
celelalte, respectiv 1 dac moneda fals este mai grea dect celelalte.
Pe perioada probei se va furniza un modul de test care citete din fiierul MONEDE.IN (pe care trebuie
s l creai) trei numere ntregi. Primul este N numrul total de monede, al doilea numrul monedei false
i al treilea va fi -1 dac moneda fals este mai uoar sau 1 dac moneda fals este mai grea.
Exemplu de succesiune de apeluri
init(); // ntoarce valoarea 5
sau n Pascal
init;
cantarire([1, 1, 0, 0, 0, 0, ...], [0, 0, 1, 1, 0, 0, ...]); //ntoarce 0
cantarire([0, 0, 0, 0, 1, 0, ...], [1, 0, 0, 0, 0, 0, ...]); //ntoarce -1
rezultat(4, -1);
Timp de executare: 1 secund pe test.
Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta
Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
OLIMPIADA NAIONAL DE INFORMATIC
BRILA 26 APRILIE 03 MAI 2002

BARAJ Sursa: ATP.pas, ATP.c, ATP.cpp


Intrare: ATP.in
ATP Ieire: ATP.out

Se tie c juctorii profesioniti de tenis sunt clasai, n funcie de rezultatele obinute, ntr-un
clasament al Asociaiei Juctorilor Profesioniti de Tenis (ATP). Studiindu-se rezultatele
ultimilor ani, s-a constatat c ntr-o partid n care se ntlnesc doi juctori, dac diferena de
locuri n clasament ntre cei doi e mai mare dect k, atunci ctig n mod sigur cel mai bine
clasat; n schimb dac diferena de poziii n clasament e de cel mult k locuri, atunci teoretic
poate s ctige oricare dintre ei.
La un concurs care urmeaz s se desfoare n curnd dup sistemul eliminatoriu, i-au
anunat participarea primii n juctori din clasament (unde n este o putere a lui 2, deci n=2x).

Cerin
S se precizeze juctorul cel mai slab clasat n clasamentul ATP care ar putea teoretic s
ctige concursul, precum i schema de desfurare a partidelor din turneu i ctigtorul fiecrei
partide, pentru ca acesta s ctige turneul.

Date de intrare
Fiierul de intrare ATP.IN conine pe prima linie, valorile lui n i k separate prin minim un
spaiu.

Date de ieire
Fiierul de ieire ATP.OUT va conine:
pe prima linie, poziia n clasament a celui mai slab clasat juctor care teoretic ar putea
ctiga concursul;
pe a doua linie, ntlnirile din primul tur al turneului; o ntlnire va fi descris prin dou
numere, corespunztoare poziiilor din clasament ale juctorilor care o susin, iar primul
juctor dintr-o pereche se consider c va ctiga partida; cele dou numere vor fi separate
printr-un spaiu; pe prima linie vor fi deci, n/2 perechi de numere separate prin minim un
spaiu;
pe a treia linie, ntlnirile din al doilea tur, descrise la fel ca cele din prima linie; pe aceast
linie vor fi n/4 perechi;
...
pe linia x, partidele din semifinalele, descris n acelai mod;
pe linia x+1, partida din final.
Restricii
n=2x
n 5000
Exemplu
ATP.IN ATP.OUT
16 3 11
3 1 5 2 6 4 7 16 8 13 9 14 10 15 11 12
5 3 8 6 9 7 11 10
8 5 11 9
11 8

Timp maxim de executare: 1 secund/test


Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta
Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
OLIMPIADA NATIONALA DE INFORMATICA
FOCSANI 2003

BARAJ
ajutor Sursa : ajutor.c, ajutor.cpp sau ajutor.pas
Dac te-ai rnit, nu folosi Sprite s tratezi rana. Cel mai bine e s fugi la cel mai apropiat post de prim ajutor.
Norocul tu este c ai o hart din care poi afla coordonatele carteziene ale posturilor de prim ajutor. Ghinionul
este c, din cauza durerii, nu poi s fugi direct spre un post, ci numai pe direciile nord-sud i est-vest. Ca s tii
dac mai are sens s fugi spre un post sau s te bucuri de ultimele clipe de via, cel mai bine e s evaluezi
distana pn la cel mai apropiat post de prim ajutor.
Cel mai apropiat post este cel pentru care distana Manhattan este minim.
De data aceasta ai scpat pentru c timpul necesar ajungerii pn la post a fost suficient ; ns i pui ntrebarea:
dac accidentul s-ar fi ntmplat n alt loc, ai fi scpat ?

Cerin
Se consider N puncte in plan, reprezentnd posturile de prim ajutor i alte M puncte reprezentnd posibile locaii
ale accidentului. Se cere pentru fiecare dintre cele M puncte distana Manhattan pn la cel mai apropiat post.

Date de intrare
Fiierul ajutor.in conine pe prima linie numerele ntregi N i M, n acest ordine, separate printr-un spaiu.
Pe urmtoarele N linii se afl cte dou numere ntregi, separate printr-un spaiu, reprezentnd coordonatele
fiecrui post de prim ajutor. Pe urmtoarele M linii se afl cte dou numere intregi, separate printr-un spaiu,
reprezentnd coordonatele punctelor de accident. Coordonatele se dau n ordinea (abscisa, ordonata).

Date de ieire
Fiierul ajutor.out va conine M linii, cu cte un numr pe fiecare linie, reprezentnd distana minim pn la
cel mai apropiat post de prim ajutor.

Restricii
0 < N < 401
0 < M < 500001
oricare coodonat este un numr ntreg din intervalul [0,32000]

Observaii
Dac te afli deja la un post de prim ajutor (coordonatele sunt identice) distana e 0.
Distana Manhattan este cel mai scurt drum ntre dou puncte, mergnd doar pe direcii paralele cu axele de
coordonate, adic |x1-x2|+|y1-y2|, unde (x1,y1), (x2,y2) sunt coordonatele celor 2 puncte.
n fiierul de intrare pot exista puncte cu aceleai coordonate.
Se acord punctele pentru fiecare test, doar dac toate valorile din fiierul de ieire sunt corecte.
Tot ce face Sprite e s-i potoleasc setea.

Exemplu
ajutor.in ajutor.out
4 4 2
1 1 0
5 5 4
1 5 1
5 1
0 0
1 1
3 3
4 1
Timp maxim de execuie/test: 1.3 secunde pentru Linux i 2 secunde pentru Windows.

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
OLIMPIADA NATIONALA DE INFORMATICA
FOCSANI 2003

BARAJ

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

n una dintre zile, la Olimpiada de Informatic se organizeaz P excursii atractive. La aceste


excursii particip n total N persoane. Pentru simplitate, persoanele au fost numerotate de la 1 la N,
primele K persoane fiind ghizii. O persoan se poate nscrie la exact una dintre cele P excursii
organizate.
Pentru a evita surprizele neplcute (insuficiente mijloace de transport, insuficiente locuri la
restaurant, etc) organizatorii intenioneaz s studieze toate configuraiile ce pot s apar n urma
nscrierilor participanilor, considernd totui c n fiecare excursie va exista cel puin un
participant.

Cerin
Scriei un program care s determine numrul de configuraii distincte ce se pot obine dup
nscrierea celor N persoane la cele P excursii organizate, astfel nct cei K ghizi s fie nscrii n
excursii diferite.

Date de intrare
Fiierul de intrare se numete ex.in i conine o singur linie pe care se afl 3 numere naturale
separate prin cte un spaiu: N K P (reprezentnd numrul de persoane, numrul de ghizi i
respectiv numrul de excursii).

Date de ieire
Fiierul de ieire ex.out conine o singur linie pe care se afl numrul de configuraii distincte.

Restricii
1KPN100
ntr-o configuraie nu conteaz ordinea excursiilor sau ordinea n care se nscriu persoanele la o
excursie.

Exemplu
ex.in ex.out Explicaie
5 3 4 7 Cele 7 configuraii distincte sunt:
N K P (1,4)(2)(3)(5)
3 ghizi (1)(2,4)(3)(5)
4 exc (1)(2)(3,4)(5)
(1)(2)(3)(4,5)
(1,5)(2)(3)(4)
(1)(2,5)(3)(4)
(1)(2)(3,5)(4)

Timp maxim de execuie: 0.1 secunde/test sub Linux i 0.5 secunde sub Windows.

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
OLIMPIADA NATIONALA DE INFORMATICA
FOCSANI 2003

BARAJ

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


Se caut ghizi pentru Olimpiada Naional de Informatic. Deoarece la Olimpiad particip K echipe, trebuie
ca n fiecare moment de timp din intervalul [0, 100) s existe exact K ghizi.

Pentru posturile de ghid s-au nscris N voluntari, care au fost numerotai distinct de la 1 la N. Fiecare dintre
cei N voluntari a specificat un interval de timp n care poate asigura servicii de ghid. Voluntarul i poate fi
ghid n intervalul [T1i, T2i) (intervalul este nchis n T1i i deschis n T2i).
Cerin
Dndu-se intervalele de timp asociate celor N voluntari, determinai o variant de angajare astfel nct n
fiecare moment de timp s fie prezeni exact K ghizi. Numrul total de voluntari angajai este irelevant.

Date de intrare
Prima linie a fiierului de intrare ghizi.in conine dou numere ntregi N i K, separate printr-un spaiu,
cu semnificaiile de mai sus. Voluntarii sunt numerotai distinct, de la 1 la N. Fiecare dintre urmtoarele N
linii conine descrierea unui voluntar; mai exact linia i+1 conine valorile ntregi T1i i T2i pentru
voluntarul i.

Date de ieire
n fiierul ghizi.out vei afia pe prima linie numrul total de ghizi angajai (M). Pe a doua linie vei scrie
M numere distincte ntre 1 i N, ordonate cresctor, reprezentnd numerele de ordine ale ghizilor angajati.

Restricii i precizri
1 N 5000
0 T1 < T2 100 pentru fiecare dintre cei N voluntari
1 K N
Pot exista 2 voluntari cu acelai interval asociat.
Toate testele date vor avea soluie.
Dac exist mai multe soluii, afiai una oarecare.
La preselecie particip numai fete.

Exemplu

ghizi.in ghizi.out
6 2 4
0 100 1 4 5 6
0 15
15 99
0 10
10 20
20 100

Timp maxim de execuie: 0.1 secunde/test sub Linux i 0.3 secunde sub Windows.

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
OLIMPIADA NATIONALA DE INFORMATICA
FOCSANI 2003

BARAJ

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


Lucrai la o firm care produce microprocesoare. Pentru asamblarea microprocesoarelor, firma utilizeaz un
robot constituit dintr-un singur bra. Braul este fixat la unul dintre capete (umrul) ntr-un punct plasat n
centrul platformei de lucru, iar la cellalt capt are un dispozitiv de lungime neglijabil cu care poate
culege componentele de pe platforma de lucru (mna). Braul se poate mica numai n plan orizontal,
deasupra platformei de lucru.
Braul este constituit dintr-o succesiune de N segmente rigide de lungimi L1, L2, ..., LN, conectate prin puncte
de articulaie. Mai exact, segmentul 1, este conectat printr-un punct de articulaie n umrul robotului,
segmentul 2 este conectat printr-un punct de articulaie de segmentul 1, ..., segmentul N este conectat printr-
un punct de articulaie de segmentul N-1 i are la cellalt capt mna. Un punct de articulaie permite
rotaia liber (la orice unghi) a segmentului conectat n acel punct de articulaie.
Pentru asamblarea unui microprocesor robotul trebuie s culeag succesiv componentele acestuia de pe
platforma de lucru. Fiecare component are o poziie bine determinat pe platforma de lucru, prin
coordonatele sale relativ la un sistem de coordonate cartezian, cu centrul n umrul robotului.
Rolul dvs. n firm este de a programa micrile robotului. n acest scop, pentru fiecare component pe care
robotul o va culege trebuie s specificai configuraia braului robotului care s permit atingerea
componentei respective (mna robotului s fie plasat deasupra poziiei n care se afl componenta).
Configuraia braului robotului este definit de unghiurile dintre segmentele braului rigid.

L3
u4 L4
u3
L2 u2 x mna robotului
L1
u1
O (umrul robotului)

Cerin
Scriei un program care, pentru o poziie dat, determin o configuraie pentru braul robotului care s-i
permit acestuia s culeag componenta din poziia respectiv, dac este posibil.

Date de intrare
Fiierul de intrare robot.in conine pe prima linie un numr natural N, care reprezint numrul de
segmente din care este format braul robotului.
Pe fiecare dintre urmtoarele N linii se afl cte un numr natural. Numrul aflat pe linia i+1 este lungimea
celui de-al i-lea segment al braului robotului.
Pe ultima linie se afl dou numere ntregi x i y, separate prin cte un spaiu, reprezentnd coordonatele
poziiei la care trebuie s ajung mna robotului.

Date de ieire
Fiierul de ieire robot.out conine o singur linie pe care se afl valoarea 0 dac nu este posibil ca mna
robotului s ajung n poziia x, y. Dac problema are soluie, fiierul de ieire conine N linii. Pe linia i se
afl valoarea real ui care reprezint unghiul dintre segmentul i i segmentul i-1 (pentru orice i de la 2 la
N), iar valoarea u1 reprezint unghiul pe care segmentul 1 l formeaz n umrul robotului cu axa OX.

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
OLIMPIADA NATIONALA DE INFORMATICA
FOCSANI 2003

Restricii i precizri
2N10000
1Li200
0ui<360
-100000x, y100000
Unghiurile se msoar n sens trigonometric i sunt exprimate n grade.
Programul de evaluare va verifica dac punctul n care este plasat mna robotului pentru configuraia
dat de dvs. (xp, yp) coincide cu punctul de coordonate (x, y). Eroarea admis este de 0.001. Mai
exact, max{|x-xp|, |y-yp|}<0.001
Orice linie se termin cu un marcaj de sfrit de linie (Enter).

Exemple

robot.in Robot.out
3 125.6725
10 0
5 252.5424
25
15 20

robot.in Robot.out
3 0
10
5
25
2 4

Timp maxim de execuie/test: 0.1 secunde pentru Linux i 0.3 secunde pentru Windows.

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
OLIMPIADA NATIONALA DE INFORMATICA
FOCSANI 2003

BARAJ

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


Preedintele unui Concurs de Informatic dorete ca la festivitatea de ncheiere s fie o atmosfer plcut.
Pentru acest lucru el vrea s aeze participanii pe n rnduri dup anumite reguli. Aceaste reguli sunt:
- pe primul rnd al slii aeaz una lng alta n persoane.
- pe rndurile urmtoare aeazarea pe poziia i (numerotarea se face de la stnga la dreapta) este condiionat
de aezarea persoanelor de pe rndul anterior, adic dac pe rndul din fa pe poziiile i i i+1 stau fie
numai biei fie numai fete, atunci se va aeza o fat, iar dac pe aceste poziii stau persoane de sex opus se
va aeza un biat.
Conform acestei reguli pe rndul cu numrul de ordine i (i {1, 2, , n}) se vor aeza n-i+1 persoane.

Cerin
Pentru n dat se cere s se determine numrul maxim de biei ce pot lua loc n sal, astfel nct s se respecte
regulile anterioare.

Date de intrare
n fiierul text sala.in pe prima linie se afl numrul de cifre ale lui n, iar pe linia a doua se afl cifrele
numrului n separate ntre ele prin cte un spaiu.

Date de ieire
n fiierul text sala.out pe prima linie se va afia numrul din cerin.

Restricii
1 n 10101
Pentru 30% din teste n<100
Pentru 70% din teste, n<30000

Exemplul 1
sala.in
1
5
sala.out
10

Exemplul 2
sala.in
2
1 3
sala.out
61

Timp de execuie/test: 0.1 secunde (att sub Windows ct i sub Linux).

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
OLIMPIADA NATIONALA DE INFORMATICA
FOCSANI 2003

BARAJ
telegraf Sursa : telegraf.c, telegraf.cpp sau telegraf.pas
Pn nu demult, comunicaia la distan se fcea cu ajutorul telegrafului. Folosind telegraful, se pot transmite
dou tipuri de semnale: punct i linie. n general, dorim s transmitem texte formate din litere ale alfabetului
latin i cifre (n total, 36 de simboluri). Trebuie deci s folosim o codificare, adic s asociem fiecruia din cele
36 de simboluri o succesiune distinct de linii i puncte. Pentru a putea decodifica o succesiune recepionat de
linii i puncte, este necesar ca nici un simbol s nu aib o codificare identic cu nceputul codificrii pentru un
alt simbol. S considerm cteva exemple (presupunnd c nu vrem s transmitem dect literele A,B,C):

Exemplul 1 Exemplul 2 Exemplul 3


A = .. A = .-- A = .-..
B = .- B = .- B = -.
C = - C = - C = .-.

Exemplul 1 reprezint o codificare corect. Exemplul 2 reprezint o codificare greit, pentru c nceputul
codificrii pentru A este identic cu codificarea pentru B (deci, o secven de genul .-- este ambigu, putnd
nsemna i A i BC). Exemplul 3 este de asemenea o codificare greit pentru c nceputul codificrii pentru A
este identic cu codificarea pentru C (o secven precum .-..-. este ambigu, putnd nsemna fie AB, fie CC).

Se tie c ntr-o transmisie telegrafic, punctul dureaz o secund, iar linia 2 secunde. Putem calcula astfel
timpul necesar transmiterii unui text.
Folosind codificarea din exemplul 1, transmiterea textului CABCA = - .. .- - .. dureaz 11 secunde.
Observai c lungimea transmisiei se poate calcula i astfel: 2(A) + 1(B) + 2(C) = 2(..) + 1(.-) + 2(-) = 2*2 + 1*3
+ 2*2 = 11.

Cerin
Se consider un text, dat prin frecvena apariiei fiecrui simbol (dintre cele 36 considerate). S se gseasc
durata minim necesar transmiterii acelui text, folosind o codificare aleas corespunztor.

Date de intrare
Fiierul telegraf.in conine o singur linie cu 36 de numere ntregi nenegative, separate prin cte un spaiu,
reprezentnd numrul de apariii ale fiecrui simbol n textul ce trebuie transmis.

Date de ieire
Fiierul telegraf.out va conine un singur numr, i anume lungimea minim (n secunde) necesar pentru
transmiterea textului.

Restricii
nici unul din cele 36 de simboluri nu apare de mai mult de 1 000 000 de ori n textul considerat
exist cel puin dou simboluri cu numr de apariii nenul

Exemplu
telegraf.in
2 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
telegraf.out
11

Se constat c este optim s se transmit acest text folosind codificarea din Exemplul 1, obinnd o lungime
minim a transmisiei de 11 secunde.

Timp maxim de execuie: 0.1 secunde pe test pentru Linux i 0.3 secunde pentru Windows
Not: 40% dintre teste vor conine maxim 16 simboluri cu frecven de apariie nenul.
Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta
Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Olimpiada Naional de Informatic
Baraj 1

invsort 100 puncte


Fiier surs: invsort.pas, invsort.c sau invsort.cpp

Se d un ir de N numere naturale, care trebuie ordonat cresctor. Singura operaie permis este s considerai
elementele de pe poziiile i, i+1, ..., j (pentru i i j arbitrare, i<j), i s inversai ordinea acestor elemente
(adic elementul de pe poziia i ajunge pe poziia j, i+1 ajunge pe poziia j-1, ..., j ajunge pe poziia i). Costul
unei astfel de operaii este numrul de elemente din subirul inversat, i anume j-i+1.

Cerin
Scriei un program care s determine o secven de operaii care ordoneaz cresctor irul dat i are un cost total ct
mai mic (dar nu obligatoriu minim).

Date de intrare
Fiierul de intrare invsort.in conine pe prima linie numrul N, i apoi N linii cu elementele irului dat (nu
neaprat distincte).

Date de ieire
Fiierul de ieire invsort.out va conine pe fiecare linie descrierea unei operaii. O operaie este descris prin
numerele i i j, separate printr-un spaiu. Aceste numere satisfac 1 <= i < j <= N.

Restricii

2 <= N <= 32000


valorile irului care trebuie ordonat sunt ntre 0 i 31999

Punctaj
dac irul de operaii (executate n ordinea din fiierul de ieire) nu ordoneaz intrarea, primii 0 puncte
n cazul n care costul total este cel mult 4000000 (patru milioane) primii punctaj maxim
n cazul n care costul total este cel mult 40000000 (patruzeci de milioane) primii 40% din punctajul pe test
n 50% din teste irul de intrare conine numai elemente de 0 i 1
pentru toate testele folosite la corectare, N=32000

Exemplu

invsort.in invsort.out Explicaie


5 3 5 prima operaie are efectul: 1 0 [1 1 0] 10011
1 1 3 a doua operaie are efectul: [1 0 0] 1 1 00111
0 costul total este 3 + 3 = 6
1
1
0

Timp maxim de execuie/test: 0.5 secunde pentru Linux i 2 secunde pentru Windows.

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Olimpiada Naional de Informatic
Baraj 1

peri 100 puncte


Fiier surs: peri.pas, peri.c sau peri.cpp

Se consider o matrice dreptunghiular A cu m linii i n coloane cu valori 0 sau 1, liniile i coloanele fiind
numerotate de la 1 la m, respectiv de la 1 la n. Numim dreptunghi de coluri (x1,y1) (x2,y2) cu x1<x2 i
y1<y2 mulimea elementelor Aij cu x1ix2 si y1jy2. Numim perimetru al dreptunghiului de
coluri (x1,y1) (x2,y2) mulimea elementelor Aij pentru care (i=x1 i y1jy2) sau (i=x2 i
y1jy2) sau (j=y1 i x1ix2) sau (j=y2 i x1ix2).

Cerin
Determinai diferena maxim dintre numrul de elemente egale cu 1 i numrul de elemente egale cu 0
aflate pe perimetrul aceluiai dreptunghi, precum i numrul de dreptunghiuri pentru care se obine aceast
diferen.

Date de intrare
Pe prima linie a fiierului de intrare peri.in sunt scrise numerele m i n, separate printr-un singur
spaiu. Pe urmtoarele m linii este dat matricea A, numerele de pe aceeai linie fiind separate de cte un
spaiu.

Date de ieire
Fiierul de ieire peri.out va conine o singur linie pe care se afl dou numere ntregi separate
printr-un spaiu. Primul numr este diferena maxim dintre numrul de elemente 1 i numrul de
elemente 0 de pe perimetrul unui dreptunghi. Al doilea ntreg este numrul de dreptunghiuri pentru care
diferena dintre numrul de elemente 1 i numrul de elemente 0 de pe perimetru este maxim.

Restricii
1 m,n 250
Prin diferen nu se nelege diferen n valoare absolut!
Exemplu

peri.in peri.out

4 5 4 2
1 0 0 1 0
0 1 1 0 0
0 1 0 1 0
1 1 1 0 1

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

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Olimpiada Naional de Informatic
Baraj 2

poligon 100 puncte


Fiier surs: poligon.pas, poligon.c sau poligon.cpp

Geo a nvat o metod de a fixa n puncte pe un cerc de raz r, astfel nct s mpart cercul n n coarde
egale ca lungime. Apoi i-a ales un numr k i a nceput s uneasc punctele succesiv, din k n k, pstrnd
acelai sens, pn ce a ajuns n punctul din care a pornit. Astfel, dac a fixat n=10 puncte pe cerc pe care
le-a numerotat 1, 2, , 10 (vezi figura) i i-a ales k=6, atunci el unete punctul 1 cu 7, apoi pe 7 cu 3,
apoi 3 cu 9, apoi 9 cu 5, i n sfrit 5 cu 1.
Apoi a colorat poligonul format n interior, pornind din centrul cercului i fr a depi vreuna dintre liniile
desenate. El se ntreab n final cte laturi are poligonul colorat i care este aria acestuia.

Cerin
Pentru n, k i r numere naturale date, se cere numrul de laturi L ale poligonului colorat i aria S a
acestuia (cu 2 zecimale exacte).

Date de intrare
Din fiierul poligon.in se citesc trei numere naturale n,
k i r desprite prin cte un spaiu.

Date de ieire
n fiierul poligon.out se scriu, pe linii diferite dou
valori: pe prima linie numrul L de laturi ale
poligonului colorat, iar pe linia a doua numrul real
reprezentnd aria acestuia.

Restricii
3 < n < 10001 numr natural
0 < k < n numr natural
pentru n par, 2 * k n
10 < r < 501
Pentru fiecare test, dac numrul de laturi determinat este corect, primii 20% din punctajul
maxim de pe testul respectiv. n plus, dac i aria determinat este corect, primii punctajul
maxim.
Pentru 70% din testele folosite la evaluare, n < 501

Exemple
poligon.in poligon.out poligon.in poligon.out
10 6 100 5 30 13 200 30
3468.92 5452.04

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

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Olimpiada Naional de Informatic
Baraj 2

politie 100 puncte


Fiier surs: politie.pas, politie.c sau politie.cpp
Gigel i Costel sunt doi poliiti cu experien. Ei lucreaz mpreun de muli ani i de multe ori au fost
nominalizai pentru premiul Poliitii anului. Anul acesta sunt hotri s-l ctige i pentru aceasta trebuie s
ncaseze ct mai muli bani din amenzi.
n fiecare zi, Gigel i Costel pot aplica trei tipuri de amenzi pentru urmtoarele evenimente:
Tip Semnificaie Suma ncasat Durata de aplicare
1 Pentru pietoni care traverseaz neregulamentar S1 T1
2 Pentru oferi de autovehicule care ncalc regulile de circulaie S2 T2
3 Pentru oferi de maini grele, cu transport ilegal de mrfuri S3 T3
Amenzile de tipul 1 i 2 pot fi aplicate de un singur poliist (Gigel sau Costel). Pentru o amend de tipul 3,
Gigel i Costel trebuie s lucreze mpreun (unul verific actele de transport, iar cellalt verific marfa).
Durata de aplicare a unei amenzi reprezint timpul necesar poliitilor pentru a verifica acte, a scrie proces
verbal, etc. Dac un poliist aplic o amend la momentul x, iar durata aplicrii amenzii este y, poliistul care aplic
amenda va deveni disponibil abia la momentul x+y. Poliitii nu fac minute suplimentare, ei sunt n activitate din
minutul 1 pn n minutul T exclusiv, deci trebuie s fie liberi s plece acas n minutul T. Pentru c n noul cod
rutier nu le mai este permis poliitilor s trag oferii pe dreapta i s-i lase s atepte, pentru a aplica o amend de
tipul 1 sau 2 trebuie s fie liber mcar un poliist, iar pentru a aplica o amend de tipul 3 ambii poliiti trebuie s
fie liberi la momentul n care survine evenimentul.
Cei doi poliiti stau la pnd i observ evenimentele din trafic. Dac nu pot aplica amenzi pentru toate
evenimentele care intervin n trafic, ei sunt nevoii s le aleag pe acelea care, n total, le aduc mai muli bani.
Cerin
Scriei un program care s determine suma maxim pe care o pot ncasa din amenzi Gigel i Costel ntr-o tur.
Date de intrare
Fiierul de intrare politie.in conine:
pe prima linie numrul natural T, reprezentnd minutul la care cei doi poliiti sunt liberi s plece acas;
pe linia a doua, dou numere naturale S1 T1 (suma ncasat i durat aplicrii unei amenzi de tipul 1);
pe linia a treia, dou numere naturale S2 T2 (suma ncasat i durat aplicrii unei amenzi de tipul 2);
pe linia a patra, dou numere naturale S3 T3 (suma ncasat i durat aplicrii unei amenzi de tipul 3);
pe linia a cincea, un numr natural N (numrul de evenimente survenite n trafic);
pe fiecare dintre urmtoarele N linii se afl dou numere naturale tip timp (tip poate fi 1, 2 sau 3 i
reprezent tipul amenzii ce poate fi aplicat; timp reprezint timpul la care a survenit evenimentul, exprimat
n numr de minute fa de nceputul turei).
Numerele scrise pe aceeai linie sunt separate prin cte un spaiu. Evenimentele sunt n ordine cronologic.
Date de ieire
Fiierul de ieire politie.out conine o singur linie pe care este scris suma maxim ce poate fi ncasat.
Restricii i precizri
0 < T, T1, T2, T3 <201
0 < S1, S2, S3 < 51
0 < N < 501
Evident, exist evenimente care intervin simultan n trafic.
Exemple
politie.in politie.out Explicaie
300 140 Aplic amndoi amenda de tipul 3 din minutul 10, apoi
10 20
30 30 Costel aplic singur amenda de tipul 1 din minutul 130,
50 25 apoi Gigel aplic singur amenda de tipul 2 din minutul 142,
8 apoi amndoi aplic amenda de tipul 3 din minutul 180.
1 5
3 10
3 20
1 130
2 142
2 160
3 180
2 280
Timp maxim de execuie/test: 0.2 secunde pentru Linux i 1.2 secunde pentru Windows.
Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta
Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Olimpiada Naional de Informatic
Baraj 2

sea 100 puncte


Fiier surs: sea.pas, sea.c sau sea.cpp
Pe mare se afl N vapoare. Malul este n mod curios perfect drept i este reprezentat prin axa Ox a sistemului de
coordonate. Cele N vapoare sunt reprezentate prin perechi de coordonate (Vxi, Vyi), unde Vyi este strict pozitiv
(marea este deasupra axei Ox). Pe mal se afl M faruri, date prin coordonatele lor Fxi (fiind exact la limita dintre
mare i uscat, y-ul lor este ntotdeauna 0). Cele M faruri sunt ciudate pentru c ele nu pot lumina dect n stnga.
Astfel aria luminat de fiecare far i este delimitat de un sfert de cerc cu o raz Fri. Mai exact, un vapor este
luminat de un anumit far dac se afl n stnga farului (are x-ul mai mic) i distana de la far la vapor este mai
mic sau egal cu valoarea Fri asociat farului respectiv.
Pentru fiecare far se mai d i un numr natural strict pozitiv Fni. Din motive greu de neles, eful portului dorete
ca fiecare far i s lumineze cel puin Fni vapoare (un vapor poate fi luminat de mai multe faruri). El dorete
consum minim de energie i vrea s afle pentru fiecare far raza minim necesar pentru a lumina numrul cerut de
vapoare.
Cerin
Determinai pentru fiecare far valoarea Fri care reprezint raza minim necesar pentru ca farul s lumineze cel
puin Fni vapoare.
Date de intrare
Prima linie a fiierului sea.in conine dou numere ntregi N i M separate printr-un spaiu, reprezentnd numrul
de vapoare, respectiv numrul de faruri. Fiecare dintre urmtoarele N linii conine cte o pereche de numere reale
separate printr-un spaiu Vxi i Vyi (coordonatele vapoarelor). Fiecare dintre urmtoarele M linii conine cte o
pereche de numere separate printr-un spaiu, unul real Fxi i unul ntreg Fni (coordonatele orizontale i numerele
asociate farurilor).
Date de ieire
Fiierul sea.out va conine M linii, fiecare linie coninnd un numr real, dat cu 4 zecimale: pe linia i se afl
raza minim necesar pentru ca farul i s lumineze Fni vapoare.
Restricii
1 <= N <= 400, 1 <= M <= 100 000
0 < y, r < 100 000, -100 000 < x < 100 000, 1 <= Fni <= N
n fiierul de intrare farurile sunt sortate cresctor dup coordonatele x.
Nu vor exista dou vapoare, sau un far i un vapor cu acelai x. n schimb pot exista dou sau mai multe faruri
cu acelai x, caz n care ele vor fi unul lng altul n fiierul de intrare (evident din moment ce sunt sortate
dup x). Ordinea n care apar n fiierul de intrare farurile cu acelai x nu este definit. Pot exista chiar dou
faruri identice.
Numerele reale din fiierul de intrare vor avea maxim 4 zecimale
Rezultatul va fi verificat cu o precizie de 0.001 (rezultatul va fi considerat corect dac modulul diferenei
dintre rezultatul corect i cel furnizat de concurent nu depete 0.001)
Exist ntotdeauna soluie (pentru fiecare far i vor exista ntotdeauna cel puin Fni vapoare n stnga lui).
Exemplu
sea.in sea.out
3 5 5.0990
-0.5 0.5 0.7071
-2 5 5.3852
3 4 0.7071
-1 1 4.4721
0 1
0 2
0 1
5 1
Timp maxim de execuie/test: 0.8 secunde pentru Linux i 1.6 secund pentru Windows.
Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta
Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Olimpiada Naional de Informatic
Baraj 1

trans 100 puncte


Fiier surs: trans.pas, trans.c sau trans.cpp
n depozitul unei companii de construcii se afl N blocuri de piatr, de culoare alb sau neagr. Ele sunt aezate n
ordinea 1,2,..,N, de la intrarea n depozit ctre interior.
Blocurile de piatr trebuie s fie transportate pe un antier de construcii, n ordinea n care ele sunt depozitate, iar
pentru aceasta va trebui nchiriat un camion de la o companie de transport. Aceasta deine Q tipuri de camioane.
Camionul de tipul i (1 <= i <= Q) poate transporta maxim Ki blocuri de piatr la un moment dat i pentru un
transport se percepe taxa Ti.
Compania de transport este de parere c, pentru a-i pstra clientela, trebuie s impun anumite standarde,
indiferent de ct de absurde ar fi, deci impune condiia ca toate blocurile de piatr plasate n camion la un transport
s aib aceeai culoare. Aadar, pentru a fi transportate toate blocurile pe antier, compania de construcii va alege
un camion de un anumit tip, iar camionul va efectua unul sau mai multe transporturi.
Pentru a micora suma total pltit, compania de construcii are posibilitatea de a schimba culoarea oricrui bloc
de piatr (din alb n negru sau din negru n alb); pentru fiecare bloc i (1 <= i <= N) se cunoate suma Si ce
trebuie pltit de a-i schimba culoarea.
Cerin
Pentru fiecare dintre cele Q tipuri de camioane deinute de compania de transport, determinai suma minim pe care
o va plti compania de construcii pentru a transporta toate cele N blocuri pe antier.
Date de intrare
Fiierul de intrare trans.in conine pe prima linie numrul ntreg N, reprezentnd numrul de blocuri de piatr
din depozit. Pe fiecare dintre urmtoarele N linii se afl informaii referitoare la cte un bloc de piatra. Pe a i-a
dintre aceste N linii se gsesc dou numere ntregi separate printr-un spaiu: Ci Si, reprezentnd culoarea celui
de-al i-lea bloc (Ci este 0 pentru alb i 1 pentru negru) i respectiv suma ce trebuie pltit pentru a-i schimba
culoarea (dac este necesar). Pe urmtoarea linie se afl numrul natural Q, reprezentnd numrul de tipuri de
camioane deinute de compania de transport. Pe fiecare dintre urmtoarele Q linii se afl informaii referitoare la
cte un camion. Pe cea de a i-a dintre aceste Q linii sunt scrise dou numere naturale separate printr-un spaiu Ki
Ti, reprezentnd numrul maxim de blocuri ce pot fi transportate simultan de ctre un camion de tipul i i
respectiv taxa ce trebuie pltit pentru fiecare transport efectuat.
Date de ieire
Fiierul de ieire trans.out va conine Q linii. Pe cea de a i-a dintre aceste linii va fi afiat suma total minim
pltit de compania de construcii pentru a transporta toate cele N blocuri de piatr, n cazul n care ar nchiria un
camion de tipul i.
Restricii i precizri
1 <= N <= 16000
1 <= Si <= 10000
1 <= Q <= 100
1 <= Ki <= N
1 <= Ti <= 100000
Cel putin 40% dintre teste vor avea Q <= 10 i Ki <= min(N, 100)
Exemplu
trans.in trans.out
4 1005
0 2 4
1 3 14
0 10
1 2
3
4 1000
4 1
2 5
Timp maxim de execuie/test: 0.3 secunde pentru Linux i 1 secund pentru Windows.
Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta
Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Ministerul Educaiei i Cercetrii
Olimpiada Naional de Informatic Baraj
Galai, 25 martie 1 aprilie 2005

anticip 100 puncte


Un sumator pe un bit este un mic dispozitiv cu 3 intrri i 2 ieiri. El primete la intrare
X1 X2
X1, X2 i Ti. X1 i X2 sunt biii ce trebuie adunai, iar Ti este transportul anterior (ca
intrare). La ieire furnizeaz Y i To. Y este suma, iar To este transportul urmtor (ca To
ieire).
S Ti
Pentru a formaliza aceste lucruri putem scrie
Y = (X1 + X2 + Ti) mod 2 (mod este restul mpririi ntregi)
To = (X1 + X2 + Ti) div 2 (div este ctul mpririi ntregi) Y
Pentru a aduna numere pe N bii se folosesc N astfel de sumatoare. Ele sunt legate ca n
figura de mai jos, adic transportul de ieire al unui sumator este transportul de intrare pentru urmtorul.
X1(N-1) X2(N-1) X12 X22 X11 X21 X10 X20

S ... S S S

Y2 Y0
Y(N-1) Y1
Problema cu aceste sumatoare pe mai multi bii este c un sumator trebuie s atepte transportul de la unitatea
anterioar (exceptnd primul sumator).
Dac unui sumator pe un bit face calculul ntr-o secund, atunci pentru un sumator pe N bii (format din N
sumatoare pe un bit) vor fi necesare N secunde.
Pentru a mbunti performana acestor sumatoare pe N bii s-au introdus nite uniti capabile s anticipeze
transportul, adic intrarea Ti. Aceste uniti verific datele de intrare precedente X1(i-1) i X2(i-1). Dac
amndou sunt 0 atunci Ti va fi 0, indiferent de ce primete acea unitate ca transport de intrare. De asemenea dac
amndou sunt 1 atunci Ti va fi 1. Toate sumatoarele care folosind anticipaia pot calcula transportul de la
sumatorul precedent ncep calculul odat cu primul sumator. Comunicarea transportului de la un sumator la
urmtorul se realizeaz instantaneu.
Cercettorii care au inventat aceste uniti de transport vor s tie cu ct mbuntesc performana sistemului i au
hotrt s se fac toate adunrile posibile, pentru a compara cu vechiul sistem. Prin toate adunrile posibile se
nelege c se va aduna orice numr pe N bii cu orice numr pe N bii fix o dat (n total 4N adunri). Ei vor s tie
ct au durat aceste operaii, adic suma tuturor timpilor pentru fiecare adunare.
Cerin: Scriei un program care s determine numrul total de secunde necesare pentru toate adunrile, folosind
dispozitivele de anticipare.
Date de intrare: Fiierul de intrare anticip.in conine o singur linie pe care se afl numrul natural N
reprezentnd numrul de bii.
Date de ieire: Fiierul de ieire anticip.out va conine o singur linie pe care va fi scris un numr natural
reprezentnd numrul de secunde necesare tuturor adunrilor posibile.
Restricii i precizri
0 < N < 51
Problema aceasta nu are nici o legtur cu vreun balaur.
Exemplu
anticip.in anticip.out Explicaii
3 128 16 adunri se realizeaz ntr-o secund; 32 adunri se realizeaz n dou
secunde; 16 adunri se realizeaz n trei secunde.
De exemplu, adunarea 010+001 necesit 3 secunde. Adunarea 010+000 necesit
2 secunde. Adunarea 010+110 necesit o secund (primul sumator adun biii
din dreapta).
Timp maxim de execuie pe test: 0.5 secunde sub sistemul de operare Linux.

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Ministerul Educaiei i Cercetrii
Olimpiada Naional de Informatic Baraj
Galai, 25 martie 1 aprilie 2005

bir
Fiier surs: bsir.pas, bsir.c sau bsir.cpp

Se d un numr natural N.
Definim un bir de lungime N ca fiind irul x0, x1, ..., xN-1, unde

xi= 1, dac i are un numr impar de bii egali cu 1 n reprezentare binar


, pentru orice 0<=i<N
0, dac i are un numr par de bii egali cu 1 n reprezentare binar

De exemplu, pentru N = 7 obinem urmtorul bir de lungime 7: 0110100

Explicaii privind obinerea bir-ului:


i (n baza 10) i (n baza 2) valoarea de pe poziia i din bir
0 0 0
1 1 1
2 10 1
3 11 0
4 100 1
5 101 0
6 110 0

Cerin
Determinai numrul M de secvene palindromice de lungime cel puin 2 dintr-un bir de lungime N.

Date de intrare
Fiierul de intrare bsir.in conine pe prima linie numrul natural N.

Date de ieire
Fiierul de ieire bsir.out va conine M modulo 30103 (restul mpririi lui M la 30103).

Restricii i precizri
2 <= N <= 1018
Secvena xi, xi+1, ..., xj-1, xj se numete palindromic dac xi=xj, xi+1=xj-1, ...

Exemple

bsir.in bsir.out bsir.in bsir.out


10 8 21 30

Timp maxim de execuie/test: 0.1 secunde sub sistemul de operare Linux.

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Ministerul Educaiei i Cercetrii
Olimpiada Naional de Informatic Baraj
Galai, 25 martie 1 aprilie 2005

evantai
Fiier surs: evantai.c, evantai.cpp sau evantai.pas
Lui Algorel i plac mult irurile de numere naturale cu proprieti ct mai ciudate. Cutnd astfel de ciudenii ale
informaticii, a gsit printr-o carte prfuit de vreme un nou tip de ir denumit evantai. Un evantai este un ir cu un
numr par de termeni, E1 E2 ... E2K, cu urmtoarea proprietate:

E1 + E2K > E2 + E2K-1 > ... > EK + EK+1


Cerin
Fiind dat un ir de numere naturale distincte A1 A2 ... AN, Algorel vrea s afle cte subiruri ale acestuia sunt
evantaie.

Date de intrare
Prima linie a fiierului evantai.in conine numrul ntreg N, reprezentnd numrul de elemente ale irului.
Urmtoarele N linii conin, n ordine, elementele irului A.
Date de ieire
Pe prima linie a fiierului evantai.out se va afla un singur numr ntreg C, reprezentnd numrul de subiruri
evantai. Rezultatul va fi afiat modulo 30103.
Restricii si precizari
2 N 700
elementele irului sunt numere ntregi distincte cuprinse ntre 1 i 1000
prin subir se nelege orice niruire de termeni Ai1 Ai2 ... Aik astfel nct i1 < i2 < ... < ik

Exemplu
evantai.in evantai.out
4 7
1
2
3
6

Timp maxim de execuie/test: 1 secund sub sistemul de operare Linux

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Ministerul Educaiei i Cercetrii
Olimpiada Naional de Informatic Baraj
Galai, 25 martie 1 aprilie 2005

galax 100 puncte


ntr-un viitor mai mult sau mai puin apropiat, oamenii vor popula n galaxii, numerotate de la 1 la n. Datorit
dezvoltrii tehnologiei de transport spaial este posibil ca din oricare galaxie s se ajung printr-un zbor n oricare
alt galaxie. Fiecare pereche de galaxii definete astfel un zbor care poate fi parcurs n orice sens.
La un moment dat se ia hotrrea ca (n+1) div 2 companii de transport s asigure libera circulaie a oamenilor
ntre galaxiile existente. Companiile sunt numerotate de la 1 la (n+1) div 2. Fiecrei companii x i se va atribui
o mulime de zboruri Zx. Notm cu Gx mulimea galaxiilor deservite de compania x prin zborurile din mulimea Zx.
Zborurile vor fi distribuite conform urmtoarelor reguli:
1) prin zborurile din Zx, compania x poate transporta oameni ntre oricare dou galaxii din Gx, (fie direct, fie
trecnd prin alte galaxii din Gx);
2) pentru oricare dou galaxii din Gx, modul n care compania x transport cltorii de la o galaxie la cealalt este
unic;
3) fiecare zbor trebuie s fie atribuit exact unei singure companii.

Cerin: Scriei un program care s determine o modalitate de atribuire a zborurilor celor (n+1) div 2
companii n conformitate cu regulile enunate mai sus.

Date de intrare: Fiierul de intrare galax.in conine o singur linie pe care va fi scris un numr natural n,
reprezentnd numrul de galaxii.

Date de ieire: Fiierul de ieire galax.out va conine cte o linie pentru fiecare pereche de galaxii. Pe aceast
linie vor fi scrise 3 numere naturale a b c, cu semnificaia zborul dintre galaxiile a i b este atribuit companiei
c.

Restricii i precizri
3<n<1001
a div b este ctul mpririi ntregi a lui a la b.

Exemplu
galax.in galax.out Explicaie
4 1 4 1 compania 1 compania 2
1 2 2 1 4 1 4
4 3 1
3 1 2
3 2 1
2 4 2 2 3 2 3
galax.in galax.out Explicaie
5 1 2 1
1 5 3 1 2 1 2
2 4 1
4 3 1 5 3 5 3
5 3 1
4 4
1 3 2
2 3 2 compania 1 compania 2
1 4 3 1 2
5 2 2
5 4 2 5 3

4 compania 3

Timp maxim de execuie pe test: 0.5 secunde sub sistemul de operare Linux.

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Ministerul Educaiei i Cercetrii
Olimpiada Naional de Informatic Baraj
Galai, 25 martie 1 aprilie 2005

spioni
Fiier surs: spioni.pas, spioni.c sau spioni.cpp
Serviciile secrete din ara Crivului au o reea foarte bine pus la punct. Reeaua este format din N centre,
numerotate de la 1 la N. ntre centre exist drumuri ce pot fi parcurse n ambele sensuri, de lungimi cunoscute. Un
drum unete dou centre. Utiliznd drumurile existente, ntre oricare dou centre exist legtur (direct sau
trecnd prin alte centre). Distana dintre dou centre este lungimea total minim a drumurilor parcurse pentru a
ajunge de la un centru la cellalt.
eful Teo a hotrt mprirea tuturor centrelor n dou departamente, de spionaj i de contraspionaj. O mprire
este considerat optimal dac maximul distanelor dintre oricare dou centre din cadrul aceluiai departament
este minim.
Dac exist mai multe soluii cu acelai maxim, se alege soluia pentru care diferena (n valoare absolut) dintre
numrul de centre din departamentul spionaj i numrul de centre din departamentul contraspionaj este minim.
Dac i n acest caz exist mai multe soluii, este preferat prima n ordine lexicografic.
Cerin
Dndu-se descrierea reelei, s se scrie un program care s gseasc o mprire optimal a centrelor n dou
departamente.
Date de intrare
Fiierul de intrare spioni.in conine pe prima linie numerele naturale N i M reprezentnd numrul de centre i
respectiv numrul de drumuri dintre ele. Pe fiecare dintre urmtoarele M linii vor fi scrise cte trei numere
naturale; mai exact, pe linia i+1 sunt scrise numerele ai bi ci cu semnificaia exist un drum ntre centrul ai i
centrul bi de lungime ci. Numerele scrise pe aceeai linie n fiierul de intrare sunt separate prin cte un spaiu.
Date de ieire
Fiierul de ieire spioni.out va conine dou linii. Pe prima linie va fi scris un numr natural care reprezint
maximul distanelor dintre dou centre din acelai departament. Pe cea de a doua linie vor fi scrise N caractere.
Caracterul i va fi litera C dac centrul i va fi n departamentul contraspionaj sau litera S dac centrul i va fi n
departamentul spionaj n mprirea optimal determinat.
Restricii i precizri
2 < N < 101
0 < ai, bi N
0 < M, ci < 16001
Spunem c mprirea (x1, x2, ..., xN) preced din punct de vedere lexicografic mprirea (y1, y2, ..., yN) dac
exist k astfel nct xi=yi, pentru orice i<k i xk<yk; litera C < litera S.
Se vor acorda punctaje pariale dup cum urmeaz:
pentru distana maxim determinat corect: 20% din punctajul testului respectiv
dac soluia este corect (din punctul de vedere al distanei maxime i al diferenei absolute minime), dar nu
este prima n ordine lexicografic: 60%
pentru obinerea primei soluii corecte n ordine lexicografic: 100%.
Exemple
spioni.in spioni.out Explicaie
5 4 3 Maximul distanelor dintre oricare dou centre din cadrul aceluiai
1 2 1 CCCCS departament este 3.
2 3 1
Diferena n valoare absolut dintre numrul de centre din
3 4 1
2 5 7 departamentul spionaj i cel de contraspionaj este 3.
Soluia este prima n ordine lexicografic.
O alt soluie ar fi SSSC, dar aceasta este mai mare lexicografic.
spioni.in spioni.out Explicaie
5 5 3 Maximul distanelor dintre oricare dou centre din cadrul aceluiai
1 3 1 CCCCS departament este 3.
3 2 1 Diferena n valoare absolut dintre numrul de centre din
2 5 7
3 4 7 departamentul spionaj i cel de contraspionaj este 3.
2 4 1
Timp maxim de execuie/test: 0.1 secunde sub sistemul de operare Linux
Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta
Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Ministerul Educaiei i Cercetrii
Olimpiada Naional de Informatic Baraj
Galai, 25 martie 1 aprilie 2005

texan 100 puncte


Un texan are o pune cu frontiera sub form de poligon convex. Fiindc a ajuns la o vrst care nu i mai
permite s mearg cu vitele la pscut pe punea sa, hotrte ca o parte din pune s o doneze celui mai
vrednic dintre nepoii si. Astfel el le pune la dispoziie nepoilor si coordonatele carteziene ale colurilor
punii i le cere s gseasc pe frontiera punii 3 poziii n care s plaseze trei rui, astfel nct unind cei
3 rui prin srm ghimpat s obin un triunghi echilateral.

Cerin
Scriei un program care s ajute nepoii s determine poziiile celor 3 rui.

Date de intrare
Fiierul de intrare texan.in conine:
Pe prima linie numrul natural n, care reprezint numrul de coluri ale punii
Pe urmtoarele n linii se afl cte o pereche de numere reale, care reprezint coordonatele colurilor
punii separate printr-un spaiu (n ordinea: abscis ordonat). Colurile punii sunt specificate
n ordinea invers a acelor de ceasornic.

Date de ieire
Fiierul de ieire texan.out va conine trei linii. Fiecare linie conine coordonatele unuia dintre cei trei
rui (n ordinea: abscis ordonat) cu un spaiu ntre ele. Aceste coordonate vor fi specificate cu 6
zecimale (cu rotunjire).

Restricii i precizri
4 < n < 501
Coordonatele colurilor punii sunt numere raionale din intervalul [-7000, 7000].
La evaluare o soluie este considerat corect cu o marj de eroare de 0.01.
Dac soluia nu este unic, va fi afiat una oarecare.
n fiierele de test, distana dintre oricare dou coluri ale punii este 1.
Latura triunghiului echilateral determinat trebuie s fie > 0.1.
Pentru datele de test exist ntotdeauna o soluie care respect cerinele problemei.

Exemplu
texan.in texan.out
5 12.500000 7.500000
10 0 -3.150637 4.725956
15 15 2.272289 19.666827
0 20.5
-10 15
0 0

Timp maxim de execuie/test: 0.2 secunde sub sistemul de operare Linux

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Olimpiada Naional de Informatic
Trgovite, 14-22 aprilie 2006

Baraj
Sursa: acolor.c, acolor.cpp, acolor.pas Ziua 1
acolor 100 puncte
Omida-agent Smith s-a sturat s tot distrug arborii i acum i dezvolt simul artistic i place mult mai mult
s-i coloreze.
De fiecare dat cnd vrea s creeze o nou arbo-pictur i ia cu el cele K creioane colorate, i alege un arbore din
grdin i pornete la lucru.
Arborele ales de Smith este alctuit din N noduri, are ca rdacin nodul R i o form potrivit pentru pictur:
fiecare nod are cel mult dou crengi care duc spre dou noduri: unul la stnga i/sau unul la dreapta;
ntre oricare dou noduri exist un drum unic format din crengi distincte, pe care omida se poate plimba pentru
a ajunge de la un nod la cellalt;
nodurile din subarborele stng al unui nod sunt toate plasate mai la stnga dect acesta, iar cele din subarborele
drept sunt toate mai la dreapta, de aceea nodurile au fost etichetate de la 1 la N de la cel mai din stnga pn la
cel mai din dreapta.
Omida a observat c picturile sale sunt frumoase doar dac respect unele reguli de baz pe care le-a citit ntr-o
carte:
orice nod trebuie s fie colorat cu exact una dintre cele K colori;
un nod trebuie s fie colorat diferit fa de printele dinspre rdcin (adic fa de nodul care preced nodul
respectiv atunci cnd omida se plimb pe drumul de la rdcin la nod);
privit din exterior arborele trebuie s fie colorat diferit de la stnga la dreapta: orice nod are o culoare diferit
de cel mai apropiat nod la stnga de el i fa de cel mai apropiat nod la dreapta (cu alte cuvinte culoarea
nodului etichetat cu i trebuie s fie diferit de culoarea nodurilor etichetate cu i-1, i+1).
Cerin
Scriei un program care s determine pentru un arbore dat n cte picturi frumoase (picturi care s respecte criteriile
din enun) poate fi transformat acesta. Deoarece numrul cerut poate fi foarte mare, este suficient s aflai restul
mpririi la 10007.
Date de intrare
Fiierul de intrare acolor.in va conine pe prima linie numerele ntregi N, R, K separate prin cte un spaiu. Pe
urmtoarele N linii este descris structura arborelui. Mai exact, pe linia i+1 vor exista dou numere sti, dri
separate printr-un spaiu, reprezentnd nodul fiu spre stnga i respectiv nodul fiu spre dreapta al nodului i. Dac
un nod nu are fiu spre stnga i/sau fiu spre dreapta atunci numrul corespunztor va fi 0.
Date de ieire
Fiierul de ieire acolor.out va conine o singur linie pe care va fi scris numrul de picturi frumoase care se
pot obine pentru arborele dat.
Restricii i precizri
0 < N 100 000, 1 R N, 1 K 100
Se acord 40 de puncte pentru teste cu N100 i K10. Se acord 60 de puncte pentru teste cu N400 i K15.
Memorie disponibil: 64 MB, din care 5 MB pentru stiv.
Exemplu
acolor.in acolor.out Figur pentru primul exemplu acolor.in acolor.out
9 5 4 3601 3 1 2 0
0 0 8 0 3
1 3 0 0
0 4 4 9 2 0
\
0 0 1 3 7
2 6
0 7 2 6
0 9
5
0 0
8 0
Timp maxim de execuie: 0.6 secunde/test

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Olimpiada Naional de Informatic
Trgovite, 14-22 aprilie 2006

Baraj
Sursa: evo.c, evo.cpp, evo.pas Ziua 1
evo 100 puncte
Este binecunoscut faptul c informaia genetic a unui organism poate fi codificat sub forma unui ir
format din simboluri din mulimea {g, a, t, c}. Pornind de la aceast codificare biologii au identificat 3 operaii
asupra irurilor de simboluri, operaii care pot modela evoluia anumitor organisme.
1. Complementaritate. Simbolul a este complementarul lui t (i reciproc), iar simbolul c este complementarul lui
g (i reciproc). Pentru un simbol x vom nota cu c(x) complementarul su. Prin extensie, dac w este un ir de
simboluri din mulimea {a, c, g, t} notm cu c(w) irul obinut prin complementarea simbolurilor lui w. De
exemplu, pentru w=aaactg, avem c(w)=tttgac.
2. Oglindire. Vom nota prin wR irul obinut prin oglindirea lui w. De exemplu pentru w=aaagatat,
wR=tatagaaa.
3. Hairpin. Pentru un ir de simboluri w, care poate fi descompus n patru subiruri w1w2w3w4 (unele dintre cele
patru siruri pot fi vide) prin operaia hairpin se obine: w1w2w3w4c(w1)R, dac w2=c(w4)R i lungimea lui w2 este
mai mare sau egal cu 1, sau c(w4)Rw1w2w3w4, dac w1=c(w3)R i lungimea lui w1 este mai mare sau egal cu 1.
Dac ambele condiii sunt verificate, oricare dintre cele dou iruri se poate obine.
n gradina Acolor a fost descoperit o specie de omizi cu sim artistic. Informaia genetic a omizilor
este codificat printr-o mulime S format din n iruri de simboluri din mulimea {a, c, g, t}. Mulimea S
este denumit mulime iniial. n evoluia omizilor, informaia genetic iniial a suferit o serie de
modificri. Pentru omizi, toate aceste modificri pot fi descrise prin aplicarea operaiei hairpin de un
numr arbitrar de ori asupra irurilor din mulimea iniial S.
Cerin: Date fiind cele n iruri din mulimea iniial S i o succesiune de m iruri de simboluri, s se decid care
dintre cele m iruri poate reprezenta codul genetic al unei omizi, cod obinut prin aplicarea unor operaii hairpin.
Date de intrare: Fiierul de intrare evo.in conine n+m+2 linii. Pe prima linie este scris numrul natural n
reprezentnd numrul de numrul de iruri din mulimea iniial S. Urmeaz n linii, pe fiecare linie fiind scris un ir
din mulimea S. Pe linia n+2 este scris numrul natural m, reprezentnd numrul de iruri care trebuie s fie
analizate. Pe urmtoarele m linii sunt scrise cele m iruri care trebuie analizate, cte un ir pe o linie.
Date de ieire: Fiierul de ieire evo.out va conine m linii, cte una pentru fiecare ir de analizat. Pe linia i se
va scrie cuvntul da, dac al i-lea ir dintre cele m iruri de analizat poate fi codul genetic al unei omizi, respectiv
cuvntul nu, n caz contrar.
Restricii i precizri
0 < n < 5, 0 < m < 1001
Lungimea unui ir din mulimea iniial S este mai mic dect 101.
Lungimea total a irurilor de analizat este mai mic dect 16001. Lungimea fiecrui ir de analizat este mai
mic dect 4001.
n 55% din teste lungimea maxim a unui ir de analizat este 700.
Memoria total disponibil este de 18MB din care 1MB pentru stiv.
Exemplu
evo.in evo.out
Explicaie
2 da Primul ir de analizat este gaaaat. Acesta poate fi obinut din gaaaat fra a aplica
acgtcg nu vreo operaie hairpin.
gaaaat da
Al doilea ir de analizat este gaaattc. Acesta nu poate fi obinut prin aplicarea
4 da
gaaaat operaiei hairpin asupra irurilor acgtcg sau gaaaat.
gaaaatcc Al treilea ir de analizat este gaaaattc. Acesta se obine aplicnd operaia hairpin o
gaaaattc singur dat asupra irului gaaaat (considernd w1=ga, w2=a, w3=aa, w4=t).
cgacgtcgtcg Al patrulea ir de analizat este cgacgtcgtcg. Acesta se poate obine din acgtcg
aplicnd de dou ori operaia hairpin (din acgtcg obinem cgacgtcg pentru
w1=ac, w2=ir vid, w3=gt, w4=cg, operaia de hairpin adugnd c(w4)R la nceputul
irului, i apoi din cgacgtcg obinem cgacgtcgtcg pentru w1=cga, w2=c, w3=gtc
i w4=g, operaia de hairpin adugnd c(w1)R la sfritul irului.
Timp maxim de execuie/test: 3 secunde

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Olimpiada Naional de Informatic
Trgovite, 14-22 aprilie 2006

Baraj
Sursa: part.c, part.cpp, part.pas Ziua 1

part 100 puncte


Ionic a primit de ziua lui de la tatl su un joc format din piese de form de triunghiular de dimensiuni diferite
i o suprafa magnetic pe care acestea pot fi aezate. Pe suprafaa magnetic este desenat un triunghi
dreptunghic cu lungimile catetelor a, respectiv b i un sistem de coordonate xOy cu originea n unghiul drept al
triunghiului, semiaxa [Ox pe cateta de lungime a, respectiv semiaxa [Oy pe cateta de lungime b. La un moment
dat Ionic aeaz pe tabla magnetic n piese, pentru care se cunosc coordonatele vrfurilor lor. Tatl lui Ionic
vrea s verifice dac pe tabl piesele realizeaz o partiie a triunghiului dreptunghic desenat, adic dac sunt
ndeplinite condiiile:
nu exist piese suprapuse;
piesele acoper toat poriunea desenat (n form de triunghi dreptunghic);
nu exist poriuni din piese n afara triunghiului desenat.
Cerin: Se cere s se verifice dac piesele plasate pe tabla magnetic formeaz o partiie a triunghiului
desenat pe tabla magnetic.

Date de intrare: Fiierul de intrare part.in conine pe prima linie un numr natural k, reprezentnd numrul
de seturi de date din fiier. Urmeaz k grupe de linii, cte o grup pentru fiecare set de date. Grupa de linii
corespunztoare unui set este format dintr-o linie cu numerele a, b, n separate ntre ele prin cte un spaiu i
n linii cu cte ase numere ntregi separate prin spaii reprezentnd coordonatele vrfurilor (abscis
ordonat) celor n piese, cte o pies pe o linie.

Date de ieire: n fiierul part.out se vor scrie k linii, cte o linie pentru fiecare set de date. Pe linia i (i=1,
2, , k) se va scrie 1 dac triunghiurile din setul de date i formeaz o partiie a triunghiului desenat pe tabla
magnetic sau 0 n caz contrar.

Restricii
1 n 150
1 k 10
a, b sunt numere ntregi din intervalul [0, 31000]
Coordonatele vrfurilor pieselor sunt numere ntregi din intervalul [0, 31000].

Exemplu
part.in part.out Figura pentru setul 1 de date Figura pentru setul 2 de date
2 1 y y
20 10 4 0
0 5 0 10 10 5 T1
0 0 10 5 0 5 b T1
b
0 0 10 0 10 5 T2 T2
10 0 20 0 10 5 T3 T4
20 10 2 O a x O a x
0 0 0 10 10 5
0 0 20 0 20 10

Timp maxim de execuie: 0.3 secunde/test

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Olimpiada Naional de Informatic
Trgovite, 14-22 aprilie 2006

Baraj
Sursa: cifru.c, cifru.cpp, cifru.pas Ziua 2

cifru 100 puncte


Copiii solarieni se joac adesea trimindu-i mesaje codificate. Pentru codificare ei folosesc un cifru
bazat pe o permutare p a literelor alfabetului solarian i un numr natural d.
Alfabetul solarian conine m litere foarte complicate, aa c noi le vom reprezenta prin numere de la 1 la m.
Dat fiind un mesaj n limbaj solarian, reprezentat de noi ca o succesiune de n numere cuprinse ntre 1 i m,
c1 c2 cn, codificarea mesajului se realizeaz astfel: se nlocuiete fiecare liter ci cu p(ci), apoi irul
obinut p(c1) p(c2) p(cn) se rotete spre dreapta, fcnd o permutare circular cu d poziii rezultnd
irul p(cn-d+1) p(cn-1) p(cn) p(c1) p(c2) p(cn-d).
De exemplu, pentru mesajul 2 1 3 3 2 1, permutarea p=(3 1 2)(adic p(1)=3, p(2)=1, p(3)=2) i
d=2. Aplicnd permutarea p vom obine irul 1 3 2 2 1 3, apoi rotind spre dreapta irul cu dou poziii
obinem codificarea 1 3 1 3 2 2.

Cerin
Date fiind un mesaj necodificat i codificarea sa, determinai cifrul folosit (permutarea p i numrul d).

Date de intrare
Fiierul de intrare cifru.in conine pe prima linie numele naturale n i m, separate prin spaiu,
reprezentnd lungimea mesajului i respectiv numrul de litere din alfabetul solarian. Pe cea de a doua
linie este scris mesajul necodificat ca o succesiune de n numere cuprinse ntre 1 i m separate prin cte un
spaiu. Pe cea de a treia linie este scris mesajul codificat ca o succesiune de n numere cuprinse ntre 1 i m
separate prin cte un spaiu.

Date de ieire
Fiierul de ieire cifru.out va conine pe prima linie numrul natural d, reprezentnd numrul de poziii
cu care s-a realizat permutarea circular spre dreapta. Dac pentru d exist mai multe posibiliti se va
alege valoarea minim. Pe urmtoarea linie este descris permutarea p. Mai exact se vor scrie valorile
p(1), p(2), , p(m) separate prin cte un spaiu.

Restricii
n 100 000
m 9999
Mesajul conine fiecare numr natural din intervalul [1, m] cel puin o dat.
Pentru teste cu m 5 se acord 40 de puncte din care 20 pentru teste i cu n 2000.

Exemplu

cifru.in cifru.out
6 3 2
2 1 3 3 2 1 3 1 2
1 3 1 3 2 2

Timp maxim de execuie/test: 0.2 secunde

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Olimpiada Naional de Informatic
Trgovite, 14-22 aprilie 2006

Baraj
Sursa: platou.c, platou.cpp, platou.pas Ziua 2
platou 100 puncte
Se consider un ir de 1048576 (2 ) elemente care sunt numere ntregi. Se definesc noiunile:
20

platou ca fiind o secven de elemente egale aflate n vector n poziii consecutive;


lungimea unui platou ca fiind numrul de elemente care alctuiesc un platoul.
Se tie c n irul considerat, lungimea maxim a unui platou este 8192 (213) i c exist cel puin un platou care
are aceast lungime. Amplasarea unui platou este determinat de poziia cea mai mic i de poziia cea mai mare
dintre poziiile elementelor care alctuiesc platoul.
Cerin: S se scrie un program care determin amplasarea unui platou de lungime 8192 n irul considerat.
Dumneavoastr nu cunoatei irul. Determinarea amplasrii platoului se face adresnd ntrebri comisiei. O
ntrebare const n a preciza dou poziii din ir, fie acestea p1 i p2. Comisia v d un rspuns care reprezint
lungimea cea mai mare a unui platou din ir aflat ntre poziiile p1 i p2.
Interaciune: Programul vostru nu va efectua operaii cu nici un fiier. El va interaciona cu un program al
comisiei care ruleaz n paralel. Dup lansarea n execuie, programul vostru trebuie procedeze astfel:
programul poate pune ntrebri programului comisiei. Formatul unei ntrebri este :
ask p1 p2
unde p1 p2 reprezint poziiile pentru care facei interogarea; dup ce a afiat ntrebarea la ieirea standard,
programul va citi de la intrarea standard o valoare care reprezint lungimea cea mai mare a unui platou aflat ntre
poziiile p1 i p2.
dup ce programul a terminat de pus ntrebri, el va afia o linie de forma:
done p1 p2
unde p1 i p2 reprezint poziiile ce determin amplasarea unui platou de lungime 8192 din ir.
Instruciuni de programare: Dup fiecare linie complet scris la ieirea standard programatorii n C trebuie s
apeleze funcia fflush(stdout), cei n C++ s apeleze cout.flush(), iar cei din Pascal procedura
flush(output). Spre exemplu,
C C++ Pascal
printf(ask 1 3\n); cout<<ask 1 3 <<endl; writeln(ask 1 3);
fflush(stdout); cout.flush(); flush(output);
Exemplu de interaciune
Interogare ask 1 8192 Interoghez lungimea maxim a unui platou ntlnit
ntre poziiile 1 i 8192
Citesc rspunsul la prima interogare 8192 Aceast lungime este 8192
Scriu c am terminat done 1 8192 Un platou cu lungime de 8192 se afl ntre poziiile 1
i 8192
Restricii i precizri: Poziiile din ir sunt numerotate de la 1 la 1048576.
Punctaj: Programul vostru obine 0 puncte la un test dac:
nu respect modul de interaciune cu programul comisiei;
utilizeaz mai mult de 20 interogri;
interogheaz cu poziii incorecte: poziii mai mici dect 1 sau mai mari dect 1048576 sau prima poziie e
mai mare strict dect a doua poziie.
Altfel, programul vostru obine pentru un punctaj care depinde de numrul de ntrebri dup cum urmeaz :
pentru cel mult 11 ntrebri obine 100% din punctaj;
pentru un numr de ntrebri cuprins ntre 12 i 15 obine 50% din punctaj;
pentru un numr de ntrebri cuprins ntre 16 i 20 obine 25% din punctaj.
Timp maxim de execuie/test: 0,7 secunde
Observaie: se garanteaz c programul comisiei rspunde pentru 20 de ntrebri n 0,6 secunde; programul vostru
are la dispoziie 0,1 secunde.

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Olimpiada Naional de Informatic
Trgovite, 14-22 aprilie 2006

Baraj
Sursa: trasee.c, trasee.cpp, trasee.pas Ziua 2

trasee 100 puncte


Fiindc nu m-am calificat la ONI, am vacan de primvar. Am luat harta rutier a rii i am marcat n orae pe
care le consider interesante i merit vizitate. Am numerotat cele n orae de la 1 la n. Oraul n care locuiesc este
numerotat cu x.
Vacana nu este lung, aa c am hotrt c a putea vizita exact k orae situate pe un traseu care respect simultan
urmtoarele condiii (numim un astfel de traseu valid):
1. Traseul pornete din oraul n care locuiesc (oraul x).
2. ntre oricare dou orae consecutive de pe traseu trebuie s existe un drum direct (drum care nu trece prin alte
orae).
3. Traseul trece prin exact k orae distincte.
4. Pentru orice ora y de pe traseu, distana (numrul de drumuri directe parcurse) pe traseul respectiv de la oraul
x la oraul y (exprimat n numr de drumuri directe parcurse pe traseu) este minim (adic nu exist un alt
traseu pe hart de la x la y avnd lungime strict mai mic).
Dou trasee valide sunt considerate disjuncte dac ele nu conin un acelai drum direct.

Cerin
Cum eu nu m-am calificat la ONI, scriei un program care s m ajute s determin numrul maxim de trasee valide
disjuncte.

Date de intrare
Fiierul de intrare trasee.in conine pe prima linie patru numere naturale n, m, x i k separate prin cte un spaiu,
care reprezint numrul de orae, numrul de drumuri directe dintre orae, numrul oraului n care locuiesc i
respectiv numrul de orae aflate pe un traseu. Urmtoarele m linii conin cele m drumuri directe de pe hart, cte un
drum pe o linie. Fiecare drum direct este specificat prin dou numere naturale distincte cuprinse ntre 1 i n,
separate printr-un spaiu, reprezentnd oraele conectate de drumul respectiv.

Date de ieire
Fiierul de ieire trasee.out va conine o singur linie pe care va fi scris numrul maxim de trasee valide
disjuncte.

Restricii i precizri
1 n 200
1 x n
1 k n
ntre dou orae poate exista cel mult un drum direct. Drumurile sunt bidirecionale.

Exemplu
trasee.in trasee.out Explicaie
7 8 1 3 3 Oraul de plecare este oraul 1. Exist patru trasee valide care trec prin
1 3 exact 3 orae, plecnd din 1 (1-3-2, 1-3-5, 1-4-7, 1-6-7). Numrul maxim
2 3 de trasee valide disjuncte este 3. O soluie ar putea fi 1-3-2, 1-4-7, 1-6-7.
5 3
4 6 3 1
4 7
1 4 4
6 1 2 6
6 7 5 7

Timp de execuie/test: 0.2 secunde

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Olimpiada Naional de Informatic
Cluj, 10-16 aprilie 2007
Baraj 1
Sursa: dist.c, dist.cpp, dist.pas

dist 100 puncte


S considerm dou propoziii formate din cuvinte scrise cu litere mari ale alfabetului englez, oricare dou cuvinte
consecutive fiind separate de unul sau mai multe spaii.
S considerm c=c1c2...cn i d=d1d2...dm dou cuvinte. Pentru a calcula distana dintre cuvintele c i d, notat
dist(c,d), cuvntul mai scurt se completeaz la sfrit cu caracterul '@' (care are codul ASCII 64), pn se
obin dou cuvinte de aceeai lungime, apoi se calculeaz suma diferenelor absolute dintre codurile ASCII ale
caracterelor situate n cuvintele c i d pe poziii corespondente:
dist(c,d)=|c1-d1|+|c2-d2|+...+|clg-dlg|, unde lg=max{n, m}).
Definim distana dintre dou propoziii ca fiind suma distanelor dintre cuvintele situate n propoziii pe poziii
corespondente. Dac una dintre propoziii are mai puine cuvinte dect cealalt se consider c la sfritul acestei
propoziii se afl cuvinte vide (cuvinte de lungime 0), pn la completarea numrului necesar de cuvinte.
De exemplu, s considerm propoziia P1="ANA ARE MERE" i propoziia P2="VASILE NU". Distana dintre
propoziia P1 i propoziia P2 este:
dist(P1,P2)=dist("ANA", "VASILE")+dist("ARE", "NU")+dist("MERE","").
dist("ANA","VASILE")=|'A'-'V'|+|'N'-'A'|+|'A'-'S'|+|'@'-'I'|+|'@'-'L'|+|'@'-'E'|=
|65-86|+|78-65|+|65-83|+|64-73|+|64-76|+|64-69|=21+13+18+9+5=66
dist("ARE","NU")=|'A'-'N'|+|'R'-'U'|+|'E'-'@'|=|65-78|+|82-85|+|69-64|=13+3+5=21
dist("MERE","")=|'M'-'@'|+|'E'-'@'|+|'R'-'@'|+|'E'-'@'|=|77-64|+|69-64|+|82-64|+|69-
64|=13+5+18+5=41.
Deci dist(P1,P2)=66+21+41=128
n scopul de a minimiza distana dintre cele dou propoziii, asupra celei de a doua propoziii putem executa una
sau mai multe operaii. O operaie const n a muta prima liter dintr-un cuvnt la sfritul cuvntului precedent
(dac acesta exist) sau ultima liter dintr-un cuvnt la nceputul cuvntului urmtor. Cuvinte vide se pot afla doar
la sfritul unei propoziii, nu i la nceputul sau n interiorul ei (nici n propoziiile date, nici n propoziiile
obinute n urma aplicrii operaiilor). Cuvintele din propoziie i cuvintele obinute n urma operaiilor nu pot s
depeasc 20 de litere.
Cerin: S se determine distana minim care se poate obine ntre cele dou propoziii efectund operaii de tipul
celor descrise n enun. Se cere de asemenea s se determine i numrul minim de operaii ce trebuie s fie
executate asupra celei de a doua propoziii pentru a obine distana minim.
Date de intrare: Fiierul de intrare dist.in conine pe prima linie prima propoziie, iar pe cea de a doua linie a
doua propoziie.
Date de ieire Fiierul de ieire dist.out va conine o singur linie pe care vor fi scrise dou numere naturale
separate prin spaiu dmin nrmin, reprezentnd n ordine distana minim dintre cele dou propoziii, respectiv
numrul minim de operaii ce trebuie s fie executate asupra celei de a doua propoziii pentru a obine distana
minim.
Restricii i precizri
Lungimea total a unei propoziii nu depete 500 caractere.
Lungimea maxim a unui cuvnt nu depete nici n propoziiile date, nici n propoziia obinut n urma aplicrii
operaiilor din enun 20 de caractere.
Numrul maxim de cuvinte dintr-o propoziie este 100.
Se acord 60% din punctaj pentru determinarea distanei minime i 100% pentru rezolvarea ambelor cerine.
Exemplu
dist.in dist.out Explicaie
ANA ARE MERE 62 9 Propoziia a doua, dup aplicarea celor 9 operaii, este:
VASILE NU V ASI LENU
Memorie total disponibil: 2 Mb din care 1 Mb pentru stiv.
Timp maxim de execuie/test: 0.1 secunde

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Olimpiada Naional de Informatic
Cluj, 10-16 aprilie 2007
Baraj 1
Sursa: promo.c, promo.cpp, promo.pas

promo 100 puncte


Compania ONIx comercializeaz N produse. Pentru a crete vnzrile, compania a pus la dispoziia clienilor M
oferte promoionale. Fiecare ofert const din exact 2 produse diferite, care sunt vndute mpreun la un pre
mai sczut dect dac ar fi vndute separat (de exemplu, suc i ap mineral). Produsele sunt identificate prin
numere de la 1 la N, iar ofertele promoionale prin numere de la 1 la M. Deoarece i-au schimbat de curnd
aplicaia software ce gestioneaz baza de date a companiei, angajaii nu s-au obinuit cu noul sistem i, din
neatenie, unul dintre acetia a ters toate informaiile despre produsele i ofertele existente. Singurele
informaii rmase sunt cele ale departamentului de statistic, care folosete o baz de date proprie. Aceste
informaii sunt reprezentate de numrul M de oferte i de toate cele K perechi de oferte ce au un produs n
comun (n mod evident, oricare 2 oferte pot avea cel mult un produs n comun).

Cerin
Folosind informaiile departamentului de statistic, determinai numrul de produse i cele 2 produse din cadrul
fiecrei oferte.

Date de intrare
Prima linie a fiierului de intrare promo.in conine numerele ntregi M i K, separate printr-un spaiu.
Urmtoarele K linii conin cte 2 numere ntregi A i B, separate printr-un spatiu, avnd semnificaia c oferta cu
numrul A i cea cu numrul B au un produs n comun.

Date de ieire
Pe prima linie a fiierului de ieire promo.out vei afia numrul ntreg N, reprezentnd numrul de produse.
Urmtoarele M linii trebuie s conin cte 2 numere ntregi, separate printr-un spaiu. A i-a linie dintre aceste M
linii va conine numerele produselor din care este format a i-a ofert.

Restrictii si precizari
1 M 2007
0 K 100000
Numrul de produse determinat trebuie s fie cel mult egal cu 2*M.
Se garanteaz existena cel puin a unei soluii. Dac exist mai multe soluii, putei afia oricare dintre ele.

Exemplu

promo.in promo.out
11 7 17
1 4 1 2
4 7 3 4
7 1 5 6
2 5 1 7
5 8 3 8
8 2 9 10
10 11 1 11
3 12
13 14
15 16
15 17
Memorie total disponibil: 16 Mb din care 1 Mb pentru stiv.
Timp maxim de execuie : 0.4 secunde/test

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Olimpiada Naional de Informatic
Cluj, 10-16 aprilie 2007
Baraj 1
Sursa: puncte.c, puncte.cpp, puncte.pas

puncte 100 puncte


Zhrel a desenat pe o foaie de hrtie N puncte n plan. Curios din fire, i-a ales nc M puncte pe axa OX i s-a
ntrebat pentru fiecare dintre cele M puncte de pe axa Ox care dintre cele N puncte este cel mai apropiat (situat la
distan minim). Se consider c distana dintre dou puncte (x1,y1) i (x2,y2) este (x1-x2)2+(y1-y2)2.

Cerin
Scriei un program pentru Zhrel care s determine pentru fiecare dintre cele M puncte de pe axa OX, care este
distana la cel mai apropiat punct dintre cele N desenate pe hrtie.

Date de intrare
Fiierul de intrare puncte.in conine pe prima linie numerele naturale N, M separate prin spaii. Fiecare dintre
urmtoarele N linii conine cte o pereche de numere naturale nenule x y, separate prin spaii, reprezentnd
coordonatele celor N puncte (n ordinea abscis, ordonat). Fiecare dintre urmtoarele M linii conine cte un numr
natural x, reprezentnd abscisele (coordonatele pe axa OX) ale celor M puncte.

Date de ieire
Fiierul de ieire puncte.out va conine M linii. Pe linia i va fi scris un numr natural reprezentnd distana la cel
mai apropiat punct dintre cele N de pe hrtie pentru al i-lea punct de pe axa OX (considernd ordinea punctelor din
fiierul de intrare).

Restricii i precizri
1 N 100 000
1 M 200 000
Toate coordonatele din fiierul de intrare sunt numere naturale din intervalul [1,109]
Cele N puncte din fiierul de intrare sunt sortate dup coordonata x cresctor, iar n cazul n care dou puncte au
aceeai abscis, ele sunt ordonate cresctor dup coordonata y.
Pentru 50% din teste N90000 i M150000.

Exemplu
puncte.in puncte.out Explicaie Figura
3 2 2 Pe hrtie au fost desenate 3 puncte, avnd
1 1 5 coordonatele (1,1), (5,1), respectiv (10,2). Pe
5 1 axa OX se afl 2 puncte, avnd abscisa 2,
10 2 respectiv 7.
2 Distana minim dintre punctul de pe axa OX de
7
abscis 2 este 2 (cel mai apropiat punct fiind cel
de coordonate (1,1)).
Distana minim dintre punctul de pe axa OX de
abscis 7 este 5 (cel mai apropiat punct fiind cel
de coordonate (5,1)).

Memorie total disponibil: 5 Mb din care 1 Mb pentru stiv.


Timp maxim de execuie/test: 0.4 secunde

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Olimpiada Naional de Informatic
Cluj, 10-16 aprilie 2007
Baraj 2
Sursa: cover.c, cover.cpp, cover.pas

cover 100 puncte


Se consider N intervale nchise, avnd extremitile numere naturale cuprinse ntre 1 i L.
Fiecare numr natural i din intervalul [1, L] are asociat o pondere ci.
Numim acoperire o mulime de numere naturale cuprinse ntre 1 i L cu proprietatea c fiecare interval conine cel
puin un element al mulimii.
Costul unei acoperiri este egal cu suma ponderilor numerelor din acoperire.
Cerin
Pentru un set de intervale dat s se determine costul minim al unei acoperiri.
Date de intrare
Fiierul de intrare cover.in conine pe prima linie cele dou numere naturale N L separate printr-un spaiu. Pe
urmtoarea linie se afl L numere naturale separate prin cte un spaiu c1 c2 ... cL reprezentnd ponderile
numerelor naturale din intervalul [1, L]. Urmtoarele N linii conin fiecare cte dou numere naturale a b (1 a
b L) reprezentnd extremitile intervalelor.

Date de ieire
Fiierul de ieire cover.out va conine o singur linie pe care va fi scris un numr natural reprezentnd costul
minim al unei acoperiri.
Restricii si precizri
1 N 60 000
1 L 1 000 000
0 ci 1024, pentru orice 1 i L
Pentru 40% din teste N 1000 i L 10000.
Exemple
cover.in cover.out Explicaie
2 5 9 Se construiete acoperirea {3} care are costul 9. Elementul 3
100 5 9 6 90 aparine ambelor intervale date n fiierul de intrare.
1 3 Exist i alte acoperiri posibile de exemplu {2, 4} dar costul
3 5
acesteia este 11 care nu este minim.

cover.in cover.out Explicaie


4 10 5 Se construiete acoperirea {1, 4, 7} care are costul 5.
1 3 6 4 5 1 0 1 3 2
1 3
3 5
6 9
4 4

Memorie total disponibil 32 MB, din care 1 MB pentru stiv.


Timp maxim de execuie/test: 0.5 secunde

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Olimpiada Naional de Informatic
Cluj, 10-16 aprilie 2007
Baraj 2
Sursa: munte.c, munte.cpp, munte.pas

munte 100 puncte


Gigel este un pasionat excursionist. i plac n special excursiile la munte. La sfritul acestei sptmni el i-a
propus s traverseze un munte din apropierea oraului Cluj. Atta doar c echipa Salvamont local i-a impus
nite condiii:
lungimea drumului trebuie s fie exact 2n-2 metri, valoarea n fiind dat de salvamontiti;
trebuie s plece de la poalele muntelui i trebuie s ajung tot la poalele muntelui de partea cealalt la
aceeai altitudine;
nu are voie s coboare sub altitudinea de plecare;
poate traversa drumul doar folosind trei tipuri de pai:
pas pe orizontal de lungime 2, deci de tipul (2, 0)
pas n sus de lungime 1, deci de tipul (1, 1)
pas n jos de lungime 1, deci de tipul (1 , -1)
drumul lui nu are voie s aib vrf la altitudinea 1, adic nu are voie ca fiind la un moment dat, pe
parcursul drumului, la altitudinea de plecare , s fac un pas n sus urmat imediat de un pas n jos.
Cerin
Dat fiind valoarea n s se determine n cte moduri poate Gigel s traverseze muntele respectnd condiiile
echipei Salvamont.
Date de intrare
Fiierul de intrare munte.in conine o singur linie pe care se afl numrul natural n.
Date de ieire
Fiierul de ieire munte.out va conine o singur linie pe care va fi scris numrul de modaliti n care Gigel
poate realiza traversarea muntelui.
Restricii
1 n 100
Pentru 60% din teste rezultatul este un ntreg pe 64 de bii.
Exemple
munte.in munte.out Explicaie
1 1 Lungimea drumului fiind 2*1-2=0, exist o singur modalitate de a
traversa muntele (aceea de a sta pe loc)

munte.in munte.out Explicaie


2 1 Lungimea drumului fiind 2*2-2=2, exist o singur modalitate de a
traversa muntele, printr-un pas de lungime 2.

(0,0) (0,2) (0,0) (0,2)


Varianta din dreapta nu este corect deoarece nu respect ultima condiie

munte.in munte.out Explicaie


3 3 Cele 3 modaliti corecte de a traversa muntele cu un drum de lungime 4 sunt:

(0,0) (0,4) (0,0) (0,4) (0,0) (0,4)


Orice alt mod de a traversa muntele pe un drum de lungime 4 este incorect.
Memorie total disponibil 16 MB, din care 1 MB pentru stiv.
Timp maxim de execuie/test: 0.1 secunde

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica
Olimpiada Naional de Informatic
Cluj, 10-16 aprilie 2007
Baraj 2
Sursa: role.c, role.cpp, role.pas

role 100 puncte


Gigel este mare fan al muzicii anilor 70. El are o colecie impresionant de benzi magnetice cu melodiile
compuse n acea perioad. Tehnica folosit n acea perioad poate prea rudimentar n zilele noastre, ns Gigel
dorete s reconstituie ct mai mult din atmosfera epocii.
Fiecare melodie este nregistrat pe o band magnetic; benzile sunt numerotate de la 1 la N. Fiecare band este
nfurat pe cte o rol din plastic , iar Gigel mai dispune de o rol goal. Rolele sunt numerotate de la 0 la N,
fiecare band avndu-i locul pe rola cu acelai numr, iar rola 0 fiind rola goal.
Cnd Gigel ascult o melodie, magnetofonul deruleaz banda de pe rola ei i o nfoar pe rola goal; la final
banda se gsete pe rola ce iniial era goal, bobinat invers, adic cu nceputul benzii n centrul rolei, iar rola pe
care se gsea iniial banda devine goal. Gigel are ntotdeauna grij ca, dup ce ascult o melodie, s rebobineze
banda napoi pe rola ei. Fratele mai mic al lui Gigel este mai dezordonat i las adesea banda pe rola pe care
ajunge n urma ascultrii. El folosete apoi rola proaspt eliberat pe post de rol goal pentru a asculta
urmtoarea melodie. Astfel, dup o vreme, multe dintre benzi se gsesc pe alt rol dect cea proprie, i unele
benzi sunt bobinate invers, adic inceputul melodiei este n interiorul nfurrii (trebuind derulate nainte de-a
putea fi ascultate).
Gigel dorete acum s restabileasc ordinea, aducnd fiecare band pe rola ei i bobinat cu nceputul n exterior.
n acest scop el poate executa o secven de operaii. La o operaie el poate doar s ia o rol i s deruleze banda
de pe ea pe singura rol ce este goal n acel moment, banda inversndu-i cu aceast ocazie sensul de bobinare.
Cerin
Se cere s se determine o secven minim de operaii n urma crora fiecare band ajunge pe rola cu numrul
egal cu numrul benzii i nfurat cu nceputul n exterior.
Date de intrare
Fiierul de intrare role.in va conine pe prima linie un numr natural N reprezentnd numrul de benzi. Pe
urmtoarele N linii se gsesc cte dou numere naturale separate printr-un spaiu, R i I. A k-a pereche descrie
poziia benzii cu numrul k : R reprezint numrul rolei pe care se afl banda k, iar I are valoarea 0 dac banda
este nfurat normal (cu nceputul n exterior) i 1 dac este nfurat invers.
Date de ieire
Fiierul de ieire role.out va conine o secven de numere naturale, cte un numr pe o linie pe linie. Numrul
de pe linia i reprezent numrul rolei de pe care se mut banda pe rola goal la cea de a i-a operaie executat.
Restricii i precizri
1 N 100000
Pe o rol poate exista cel mult o band la un moment dat.
Pentru toate datele de test va exista o soluie care necesit cel puin o operaie.
Punctaj. Pentru soluie optim se acord 100% din punctaj.
Dac soluia nu este optim, dar este corect, se vor acorda punctaje pariale dup cum urmeaz:
1. dac diferena dintre numrul de operaii executate de concurent i numrul optim de operaii este mai
mic sau egal dect 10% din numrul optim (parte ntreag), se acord 60% din punctaj;
2. dac diferena dintre numrul de operaii executate de concurent i numrul optim de operaii este mai
mare dect 10% din numrul optim (parte ntreag), se acord 20% din punctaj.
Exemple
role.in role.out role.in role.out
2 0 3 3
1 0 2 0 2
0 1 0 1 1
3 1 3
2
0
Memorie total disponibil 16 MB, din care 1 MB pentru stiv.
Timp maxim de execuie/test: 0.3 secunde

Probleme pentru laborator: Coordonator: Universitatea "Ovidius" Constanta


Algoritmi si Structuri de Date Adrian Rabaea Facultatea de Matematica si Informatica

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