www.agora.ro

Încercați-vă puterile!

PROBLEME propuse pentru REZOLVARE

Olimpiada Națională de Informatică s-a organizat anul acesta la Constanța. Concursul s-a desfășurat pe trei grupe: clasa a IX-a, clasa a X-a și clasele a XI-a și a XII-a. De asemenea a existat o probă de baraj pentru selecționarea membrilor Lotului Național de Informatcă. Vă propunem să încercați să rezolvați problemele cu care s-au confruntat concurenții la această competiție.

Clasa a IX-a

P050001: Algor

prof. Roxana Tâmplaru, Liceul "Ștefan Odobleja", Craiova

Georgel scrie un algoritm care conține structuri de atribuire, alternative, de selecție, repetitive și compuse. După scrierea algoritmului vrea să-l testeze pentru toate cazurile posibile. Pentru aceasta trebuie să cunoască numărul minim de date de test necesare.

Pentru descrirea structurilor se utilizează următoarele cuvinte cheie:

- pentru atribuire: ATRIB

- pentru alternativă: DACA

ATUNCI

ALTFEL

unde ALTFEL poate lipsi

- pentru selecție: ALEGE

CAZ

CAZ_IMPLICIT

unde CAZ_IMPLICIT poate lipsi

- pentru repetitive: 1) CAT_TIMP

2) REPETA

PANA_CAND

3) PENTRU

- pentru compusă: INCEPUT

SFARSIT

Nu se face diferență între literele mari și literele mici. Un algoritm începe cu cuvântul cheie INCEPUT, se termină cu SFARSIT și nu conține structuri vide. De asemenea, o structură compusă începe cu cuvântul cheie INCEPUT și se termină cu SFARSIT.

Cerință

Să se calculeze numărul minim de date de test necesare pentru verificarea algoritmului.

Date de intrare

Fișierul ALGOR.IN conține algoritmul, pe fiecare linie existând un cuvânt cheie. Nu există linii vide, algoritmul respectă principiile programării structurate și este corect.

Date de ieșire

În fișierul ALGOR.OUT se va scrie pe prima linie numărul minim de date de test necesare pentru verificarea algoritmului. Verificarea se bazează pe principiul "cutiei transparente", ceea ce înseamnă că testele se compun astfel încât să fie posibilă executarea algoritmului pe toate ramurile posibile. De exemplu, în cazul unei structuri repetitive CAT_ TIMP care conține în corpul său un singur ATRIB, un test vizează o execuție fără să se intre în corpul structurii, altul pentru a trece cel puțin o dată și prin corpul acesteia. În mod similar se tratează și structura PENTRU.

Restricție

După cuvintele cheie ATUNCI, ALTFEL, CAZ, CAZ_IMPLICIT, CAT_TIMP, REPETA, PENTRU trebuie să existe obligatoriu o structură de atribuire, alternativă, de decizie, repetitivă sau compusă.

Exemplul 1

ALGOR.IN ALGOR.OUT

INCEPUT 2

atrib

DACA

atunci

ATRIB

SFARSIT

Exemplul 2

ALGOR.IN ALGOR.OUT

INCEPUT 1

ATRIB

REPETA

inceput

atrib

atrib

SFARSIT

SFARSIT

Observație

REPETA se execută cel puțin o dată.

Exemplul 3

ALGOR.IN ALGOR.OUT

INCEPUT 3

ATRIB

ALEGE

CAZ

ATRIB

CAZ

INCEPUT

ATRIB

ATRIB

SFARSIT

SFARSIT

Observații

- se execută ATRIB de la primul CAZ;

- se execută ATRIB de la al doilea CAZ;

- nu se execută nici primul CAZ, nici al doilea CAZ.

Exemplul 4

ALGOR.IN ALGOR.OUT

INCEPUT 3

ATRIB

ALEGE

CAZ

ATRIB

CAZ

ATRIB

CAZ_IMPLICIT

ATRIB

SFARSIT

Observații

- se execută ATRIB de la primul CAZ;

- se execută ATRIB de la al doilea CAZ;

- se execută ATRIB de la CAZ_IMPLICIT.

Exemplul 5

ALGOR.IN ALGOR.OUT

INCEPUT 4

atrib

DACA

ATUNCI

ATRIB ALTFEL

ATRIB

pentru

atrib

SFARSIT

Observații

- se execută ATUNCI și PENTRU;

- se execută ATUNCI și nu se execută PENTRU;

- se execută ALTFEL și PENTRU;

- se execută ALTFEL și nu se execută PENTRU.

Exemplul 6

ALGOR.IN ALGOR.OUT

INCEPUT 6

PENTRU

INCEPUT

ATRIB

daca

atunci

atrib

altfel

INCEPUT

DACA

ATUNCI

ATRIB

DACA

ATUNCI

ATRIB

ALTFEL

ATRIB

SFARSIT

SFARSIT

SFARSIT

Timp maxim de execuție

1 secundă/test

P050002: Cod

prof. Eugen Ionescu, Liceul "Tiberiu Popoviciu", Cluj-Napoca

Pentru a concura cu numărul de serie de la procesoarele Intel Pentium III, AMD a stabilit un sistem de identificare pentru noile procesoare cu numele de cod Thunderbird. Fiecare firmă distribuitoare primește o mulțime de litere (de exemplu: {a,m,x}) din care va trebui să-și formeze codurile proprii de identificare. Firmelor li se impune exact de câte ori trebuie să apară fiecare literă în aceste coduri. De exemplu, o firmă trebuie să formeze identificatori care să conțină exact trei litere a, două litere m și o literă x.

Cerință

Scrieți un program care, cunoscând un anumit cod dat, determină următorul cod corect în ordine lexicografică, dacă există un astfel de cod următor.

Date de intrare

Singura linie a fișierului de intrare COD.IN conține un cod. Codurile sunt formate din cel mult 100 de litere mici ale alfabetului latin.

Date de ieșire

Fișierul de ieșire COD.OUT va conține o singură linie pe care se va afla codul următor; dacă nu există un astfel de cod, atunci în fișier se va scrie Este ultimul cod.

Exemplul 1

COD.IN COD.OUT

amaaxm amamax

Exemplul 2

COD.IN COD.OUT

xmmaaa Este ultimul cod.

Timp maxim de execuție

1 secundă/test

P050003: Comoara

Mihai Stroe, student, Universitatea Politehnică, București

Cei K membri ai unui grup de căutători de comori se află într-un complex dreptunghiular format din camere pătrate de latură 1. În mod normal toate camerele ar trebui să fie deschise, dar o parte dintre ele sunt închise și pot fi deschise doar cu ajutorul unor cartele speciale. Astfel, fiecare cameră și fiecare cartelă are asociat un număr între 0 și 20; o cameră cu numărul asociat 0 este deschisă de la început, în timp ce una cu numărul asociat diferit de 0 este inițial închisă, poate fi deschisă din interior sau din exterior dintr-o cameră vecină cu o cartelă cu numărul corespunzător și va rămâne deschisă ulterior. Cartelele cu numărul asociat 0 nu au nici o întrebuințare practică. Un număr poate fi asociat mai multor cartele, respectiv camere.

Dintr-o cameră se poate trece în alta numai dacă ele sunt vecine și ambele sunt deschise. Două camere se consideră vecine dacă au un perete (deci o latură) în comun.

În fiecare cameră se află comori cu o valoare între 0 și 10000. De asemenea, în fiecare cameră se află exact o cartelă de acces (cu numărul asociat între 0 și 20); un căutător de comori poate ridica și folosi cartelele din camerele prin care trece, dar nu le poate da unui alt căutător decât dacă respectivul se află în aceeași cameră cu el.

Cerință

Cunoscându-se configurația complexului și pozițiile inițiale ale căutătorilor de comori, să se determine valoarea maximă a comorilor adunate de aceștia.

Date de intrare

Datele de intrare se citesc din fișierul COMOARA.IN care conține:

- pe prima linie dimensiunile complexului, m și n;

- pe următoarele m linii numerele asociate fiecărei camere;

- pe următoarele m linii valorile comorilor din fiecare cameră;

- pe următoarele m linii numerele asociate cartelelor din fiecare cameră;

- pe următoarea linie numărul K al membrilor grupului;

- pe următoarele K linii pozițiile inițiale ale membrilor grupului în complex.

Date de ieșire

În fișierul COMOARA.OUT se va afișa valoarea totală a comorilor care pot fi strânse de cei K membri ai grupului.

Restricții

· m,n Ł 40

· k Ł 10

Exemplu

COMOARA.IN COMOARA.OUT

3 3 23909

0 0 11

14 0 10

19 0 0

5162 4331 1390

5230 1955 9796

5507 6210 1021

0 0 0

19 0 0

0 0 0

2

3 2

2 1

Observație

Al doilea căutător de comori nu poate pătrunde în camera (3,1), deși are cartela corespunzătoare, deoarece nu poate părăsi camera (2,1) în care este plasat inițial.

Timp maxim de execuție

1 secundă/test

P050004: Cuburi

prof. Ovidiu Domșa, Colegiul "Horea, Cloșca și Crișan", Alba Iulia

Un joc nou este format din n cuburi identice, numerotate de la 1 la n. Fiecare cub are toate cele șase fețe adezive (cu "scai"). Jocul constă în realizarea unui obiect din toate cele n cuburi. Obiectul inițial este cubul 1. Un obiect se obține din obiectul anterior prin alipirea unui nou cub la un cub aflat în obiect, pe una din fețele acestuia. Pentru alipirea unui cub nou, se extrage un bilețel cu numărul cubului la care se va alipi acesta și se aruncă un zar care va indica unde va fi lipit cubul nou (sus, jos, la stânga, la dreapta, în față sau în spate, poziții codificate respectiv cu 1, 2, 3, 4, 5, 6, ale cubului din obiect.

Cerințe

a) Dându-se o succesiune de alipire a cuburilor, verificați dacă aceasta este validă

b) Dacă succesiunea este validă, precizați dacă obiectul obținut are forma unui paralelipiped plin, specificând dimesiunile acestuia.

Date de intrare

Fișierul CUBURI.IN conține pe prima linie valoarea lui n. Pe următoarele n-1 linii, se află o succesiune de așezare a cuburilor, pentru fiecare cub specificând:

număr_cub bilețel zar, valori separate prin câte un spațiu.

Date de ieșire

Fișierul de ieșire CUBURI.OUT va conține pe două linii rezultatele de la punctul a) și respectiv b) după cum urmează:

a) Dacă succesiunea este validă, prima linie va conține valoarea 0.

În caz contrar, prima linie va conține numărul cubului ce nu poate fi alipit, numărul cubului și numărul feței la care nu se poate alipi, precum și codul de eroare:

1) pentru alipire la cub inexistent;

sau

2) pentru alipire pe o față ocupată.

b) Dacă obiectul nu este paralelipiped plin, sau dacă succesiunea nu este validă, a doua linie a fișierului va conține valoarea 0.

Dacă obiectul este paralelipiped plin, a doua linie a fișierului va conține dimensiunile acestuia, măsurate în număr de cuburi, în ordinea:

număr de cuburi pe direcțiile sus-jos, stânga-dreapta, față-spate, separate prin câte un spațiu.

Restricții

· 2 Ł n Ł 1000

· pe o dimensiune se alipesc cel mult 10 cuburi.

Exemplul 1

CUBURI.IN CUBURI.OUT

6 0

2 1 1 3 2 1

3 2 4

5 1 4

6 3 1

4 6 3

Exemplul 2

CUBURI.IN CUBURI.OUT

8 6 3 6 1

2 1 1 0

5 1 4

6 3 6

7 6 2

3 2 4

4 2 6

8 7 3

Exemplul 3

CUBURI.IN CUBURI.OUT

8 8 7 3 2

2 1 1 0

4 2 6

3 2 4

6 3 6

7 6 2

5 1 6

8 7 3

Exemplul 4

CUBURI.IN CUBURI.OUT

4 0

2 1 1 0

4 2 1

3 2 4

Timp maxim de execuție

1 secundă/test

P050005: Fibo

prof. Marinel Șerban, Liceul de Informatică, Iași

Considerăm șirul lui Fibonacci: 0,1,1,2,3,5,8,13,21,... Fiind dat un număr natural (nÎN), scrieți acest număr sub formă de sumă de elemente neconsecutive din șirul Fibonacci, fiecare element putând să apară cel mult o dată, astfel încât numărul de termeni ai sumei să fie minim.

Date de intrare

Din fișierul de intrare FIB.IN se citește de pe prima linie numărul natural n. Acesta poate avea cel mult 80 de cifre.

Date de ieșire

În fișierul de ieșire FIB.OUT se vor afișa termeni ai șirului Fibonacci, câte unul pe linie, a căror sumă este n.

Exemplul 1

FIB.IN FIB.OUT

20 2

5

13

Exemplul 2

FIB.IN FIB.OUT

8 8

Timp maxim de execuție

1 secundă/test

P050006: Kommando

prof. Marinel Șerban, Liceul de Informatică, Iași

Într-o clădire cu h etaje sunt reținuți, la parter, câțiva prizonieri de către T teroriști. Fiecare etaj al clădirii are mŽn camere identice. Fiecare cameră are un cod numeric (nu neapărat unic) exprimat printr-un număr din intervalul 0-255. O trupă de kommando, formată din K specialiști în lupte antitero, trebuie să elibereze prizonierii. Trupa de kommando este parașutată pe clădire și încearcă să ajungă la parter.

Se cunoaște locul (x,y) unde fiecare membru al trupei a aterizat pe acoperiș. Greutatea fiecărui membru al trupei este exprimată în unități din intervalul 1-255. Un membru al trupei poate trece "în jos" printr-o cameră a clădirii doar dacă "greutatea lui trece prin camera respectivă", conform următoarei definiții.

Definiție

Spunem că "a trece prin b" (a>>b) dacă, în reprezentare binară, numărul de cifre 1 a lui a este mai mic sau egal cu numărul de cifre 1 a lui b și cifrele 1 ale lui a sunt comune cu unele cifre 1 ale lui b.

Exemplu

"44 trece prin 174" (44>>174) deoarece

44 = 00101100

174 = 10101110

Pentru detectarea unei camere prin care să poată trece, un membru al trupei de kommando poate să se deplseze cu un "pas" în cele 8 direcții alăturate poziției curente în care a ajuns prin aterizare sau trecând "în jos". Prin "pas"-ul respectiv se ajunge la una din cele 8 camere vecine. Prizonierii pot fi eliberați doar dacă la parter ajung cel puțin T membri ai trupei de kommando. Să se determine dacă prizonierii pot fi eliberați sau nu, precum și numărul de membri ai trupei de kommando care pot să ajungă la parter.

Date de intrare

Fișierul text KOMMANDO.IN are structura următoare:

· pe prima linie sunt scrise valorile m, n, h, K, T despărțite prin câte un spațiu, cu semnificațiile descrise mai sus;

· următoarele h linii reprezintă codurile celor mŽn camere ale unui etaj, despărțite prin câte un spațiu;

· ultimele K linii ale fișierului conțin greutatea și coordonatele x și y ale pozițiilor de aterizare pe acoperiș ale celor K membri ai trupei de kommando, pentru fiecare câte o linie:

m n h K T

c111 c112 ... c11n c121 c122 ... c12n ... c1m1 c1m2 ... c1mn

c211 c212 ... c21n c221 c222 ... c22n ... c2m1 c2m2 ... c

2mn

...

ch11 ch12 ... ch1n ch21 ch22 ... ch2n ... chm1 chm2 ... chmn

G1 x1 y1

G2 x2 y2

...

GK xK yK

Date de ieșire

În fișierul text KOMMANDO.OUT se va scrie:

· pe prima linie DA sau NU;

· pe linia a doua - numărul de membri ai trupei de kommando ajunși la parter.

Restricții

· 2 Ł m,n,h Ł35, 1 Ł xi Ł m, 1 Ł yi Ł n

· 1 Ł T, K, Gi Ł 255

· 0 Ł cijk Ł 255

· Toate valorile sunt întregi.

Exemplu

KOMMANDO.IN

5 5 5 3 2

0 0 0 0 0 0 0 33 0 0 0 0 2 0 0 0 0 0 3 0 0 0 0 0 0

0 0 0 0 0 0 1 0 0 0 0 44 2 0 0 0 0 0 3 0 0 0 0 0 0

0 0 0 0 0 11 0 0 0 0 0 0 2 22 0 0 0 0 0 3 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 66 2 0 0 0 0 0 7 0 15 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

1 2 2

2 3 3

3 4 4

KOMMANDO.OUT

DA

2

Timp maxim de execuție

5 secunde/test

Clasa a X-a

P050007: Pariul broscuțelor

prof. Stelian Ciurea, Universitatea "Lucian Blaga", Sibiu

Câteva broscuțe din orașul C..., mergând la plimbare prin parcul din centrul orașului și descoperind un mozaic asemănător unei table de șah de dimensiune nŽn, au inventat un joc cu următoarele reguli:

· fiecare broscuță pornește din centrul pătrățelului aflat în colțul din stânga-sus al tablei, trece prin fiecare pătrățel al mozaicului, și se întoarce în pătrățelul de unde a pornit;

· o broscuță poate sări din centrul unui pătrățel oarecare în centrul oricăruia din pătrățelele vecine aflate în direcțiile: N, S, E, V, NE, NV, SE, SV;

· dacă se unesc centrele pătrățelelor în ordinea în care au fost parcurse, se obține o linie închisă care nu trebuie să se autointersecteze.

Una dintre broscuțe - mai nechibzuită - face pariu pe greutatea ei în musculițe, că poate găsi o ordine în care să acopere cu sărituri mozaicul, astfel încât lungimea drumului parcurs să nu poată fi depășită.

Lungimea este în sens geometric: drumul dintre centrele a două pătrate cu o latură comună este 1, iar între centrele a două pătrate ce au doar un vârf comun, distanța este .

Cerință

Din păcate, broscuța nu prea știe cum să procedeze, așa că vă roagă să îi indicați ordinea în care trebuie să parcurgă pătrățelele tablei, astfel încât să nu piardă pariul.

Date de intrare

Fișierul de intrare FROG.IN, conține pe prima linie valoarea lui n.

Date de ieșire

În fișierul FROG.OUT se vor scrie, pe linia i (i=1...n2+1), două perechi de valori separate printr-un spațiu, reprezentând coordonatele pătrățelului unde trebuie să sară broscuța la pasul i (se consideră că în colțul din stânga sus avem coordonatele 1,1, iar localizarea unui pătrățel se face ca în matrice).

Restricție

2 Ł n Ł 250

Exemplu

FROG.IN FROG.OUT poate conține:

4 1 1

2 2

2 1

3 1

3 2

4 1

4 2

3 3

4 3

4 4

3 4

2 3

2 4

1 4

1 3

1 2

1 1

Timp maxim de execuție

3 secunde/test

P050008: Castel

prof. Dana Lica, Liceul "Ion Luca Caragiale", Ploiești

Unui muncitor i se încredințează o misiune grea. El are de lăcuit toate coridoarele unui castel. Pentru aceasta el primește o hartă în care sunt reprezentate coridoarele și cele N puncte de intersecție ale acestora (numerotate de la 1 la N). Unele puncte de intersecție sunt considerate de muncitor ca fiind "puncte speciale" deoarece ele sunt singurele puncte care îi permit ieșirea și intrarea în castel, prin intermediul unor uși.

Deoarece operația de lăcuire trebuie să fie efectuată în cel mai scurt timp, muncitorului i s-a impus ca orice coridor să nu fie traversat decât o singură dată, adică doar atunci când este lăcuit.

În aceste condiții, muncitorul trebuie să lăcuiască toate coridoarele, folosindu-se eventual de "punctele speciale" ale castelului, plecând din orice intersecție de coridoare dorește și terminând operația în același punct.

Cerință

Determinați un traseu prin care operația este satisfăcută.

Date de intrare

Fișierul de intrare CASTEL.IN conține:

· Pe prima linie numărul N.

· Pe a doua linie numărul de coridoare M.

· Pe următoarele M linii perechi de două numere reprezentând perechi de puncte între care există coridor care trebuie lăcuit.

· Pe următoarea linie numărul P reprezentând numărul de "puncte speciale".

· Pe ultima linie șirul "punctelor speciale" separate prin câte un spațiu.

Date de ieșire

Ieșirea se va face în fișierul CASTEL.OUT care va avea formatul următor:

· Pe prima linie se va scrie mesajul DA sau NU, după cum există sau nu un traseu ciclic care respectă cerințele.

· În caz afirmativ fișierul va conține pe a doua linie un șir de numere reprezentând punctele în ordinea de apariție pe traseu, despărțite după caz de secvența de caractere ' - ' (spațiu minus spațiu) sau ' * ' (spațiu asterisc spațiu).

· O secvență de tipul i - j semnifică faptul că muncitorul a traversat și lăcuit coridorul dintre punctele i și j. O secvență de tipul i * j semnifică faptul că muncitorul a părăsit castelul prin "punctul special" i și a revenit în castel prin "punctul special" j.

Restricții

· 1 Ł N Ł 5000

· 0 Ł M Ł 10000

Exemplu

CASTEL.IN CASTEL.OUT poate conține:

6 DA

6 1 - 2 - 5 * 6 - 4 - 3 - 2 * 4 - 1

1 2

2 3

3 4

4 1

2 5

4 6

5

1 2 5 4 6

Notă

· Jumătate din testele folosite pentru evaluare vor avea dimensiunea N Ł 100

· În cazul în care nici un test cu soluție nu va fi trecut, punctajele pentru testele pentru care răspunsul este NU nu vor fi acordate.

Timp maxim de execuție

2 secunde/test

P050009: Drumuri scurte

prof. Stelian Ciurea, Universitatea "Lucian Blaga", Sibiu

Se consideră un graf turneu cu n vârfuri. Numim graf turneu un graf orientat la care între oricare două vârfuri se află un arc și numai unul.

Cerință

Să se găsească o dispunere a arcelor grafului astfel încât între oricare două noduri să existe un drum de lungime 1 sau 2.

Date de intrare

Fișierul de intrare GRAF.IN, conține pe prima linie valoarea lui n.

Date de ieșire

Ieșirea se va face în fișierul GRAF.OUT care va conține:

· matricea de adiacență a grafului care îndeplinește cerințele problemei (pe linia i a fișierului se va afla linia i a matricei) în cazul în care există soluție;

· textul fara solutie (cu litere mici!), dacă nu există nici o posibilitate de dispunere a arcelor.

Restricție

2 Ł n Ł 250

Exemplu

GRAF.IN GRAF.OUT poate conține:

6 0 1 1 1 0 0

0 0 1 1 1 0

0 0 0 1 0 1

0 0 0 0 1 1

1 0 1 0 0 1

1 1 0 0 0 0

Explicație

Matricea de adiacență din GRAF.OUT corespunde grafului din imaginea de mai jos:

Timp maxim de execuție

3 secunde/test

P050010: Lac

prof. Dan Grigoriu, Colegiul Național "Tudor Vianu", București

Un lac are forma cubică, cu latura M (număr natural). El este împărțit în M3 poziții elementare. O poziție (o căsuță) este identificată prin coordonatele n, l, c, ca într-un spațiu tridimensional, unde:

· n reprezintă nivelul (1 pentru cel din imediata apropiere a suprafeței apei, M pentru nivelul de pe fundul lacului);

· l reprezintă linia (linia 1 este linia cea mai apropiată de privitor);

· c reprezintă coloana (coloana 1 este cea din stânga privitorului).

Exemplu

Pentru m=4

Exemple de deplasări elementare:

- din poziția (4, 2, 2) se poate ajunge la una din pozițiile: (3, 1, 1), (3, 1, 2), (3, 1, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 3, 1), (3, 3, 2), (3, 3, 3);

- din poziția (2 ,1, 1) se poate ajunge la una din pozițiile: (1, 1, 1), (1, 1, 2), (1, 2, 1), (1, 2, 2).

La suprafața apei, considerată pe nivelul 0, există o căsuță specială, și anume cea în care trebuie să ajungă în final un scafandru ce pleacă de pe fundul lacului.

În lac există poziții elementare considerate ca fiind stații de lucru ce au de transmis la suprafață anumite mesaje. Aceste stații pot fi oricâte și pot fi dispuse oriunde în cub (chiar și în poziția de plecare a scafandrului).

Scafandrul se poate deplasa din poziția sa numai într-o poziție de pe nivelul imediat superior (de la nivelul i la nivelul i-1, pentru 1ŁiŁm) și care diferă ca linie și coloană cu cel mult 1 de poziția precedentă. Deci dintr-o poziție se poate ajunge în cel mult 9 poziții pe nivelul imediat superior (vezi figura).

Scafandrul se află pe fundul lacului la coordonatele m, l1, c1. El trebuie să ajungă la suprafața lacului (adică deasupra primului nivel al cubului), într-o poziție de coordonate 0, l2, c2, adică imediat deasupra poziției 1, l2, c2 din cub.

Cerință

Trebuie determinat drumul pe care trebuie să-l aleagă scafandrul pentru a duce la destinație cât mai multe mesaje, respectând restricțiile din enunț.

Date de intrare

Fișierul de intrare LAC.IN, conține:

· pe prima linie cinci numere m l1 c1 l2 c2 despărțite prin câte un spațiu, m reprezentând dimensiunea cubului, l1, c1 linia și coloana poziției de plecare, iar l2, c2 linia și coloana poziției de sosire;

· pe a doua linie numărul y de stații din lac;

· pe următoarele y linii seturi de câte patru numere n l c p. Primele trei numere n l c reprezintă coordonatele unei stații, iar ultimul număr (p), reprezintă numărul de mesaje ce trebuie transmise de stația respectivă.

Date de ieșire

Ieșirea se va face în fișierul LAC.OUT în formatul următor:

· pe prima linie se va scrie numărul maxim de mesaje aduse la suprafață.

· pe următoarele m+1 linii se vor scrie seturi de patru numere n l c p, primele trei numere reprezentând coordonatele stațiilor vizitate (în ordinea parcurgerii), iar ultimul număr reprezentând numărul de mesaje culese din stația respectivă.

Prima linie din cele m+1 reprezintă punctul de plecare, iar ultima repreyintă punctul de sosire (nivelul 0).

Restricții

· 2 Ł M Ł 20

· 0 Ł P Ł 100

Exemplu

LAC.IN LAC.OUT poate conține:

3 2 2 2 2 22

6 3 2 2 5

1 3 1 10 2 3 2 7

2 1 3 9 1 3 1 10

2 2 1 6 0 2 2 0

2 3 2 7

2 3 3 8

3 2 2 5

Timp maxim de execuție

1 secundă/test

Note

· Nu este permisă ieșirea din lac decât prin punctul de sosire.

· În punctul de sosire nu se află nici o stație.

· Dacă pentru o anumită poziție toate mutările posibile sunt în căsuțe fără stații, atunci în fișierul de ieșire se va scrie o linie cu coordonatele căsuței alese și valoarea 0 pentru numărul de mesaje (ca pentru o stație cu 0 mesaje).

P050011: Obiective turistice

Cristian Cadar, student, Universitatea Politehnică, București

În județul Constanța se găsesc cel mult 2500 de obiective turistice dispuse pe o suprafață asemănătoare cu un caroiaj format din pătrățele având latura de 1 kilometru. Obiectivele sunt amplasate în unele puncte de intersecție ale caroiajului.

Două obiective se consideră vecine dacă sunt situate pe una din direcțiile Nord, Sud, Est, Vest la o distanță de 1 kilometru una față de alta.

Între anumite perechi de obiective vecine au fost construite drumuri directe, pentru a se asigura deplasarea între oricare două obiective.

Despre fiecare obiectiv avem următoarele informații:

· numărul asociat acestuia, care este unic și are o valoare cuprinsă între 1 și numărul total al obiectivelor;

· obiectivele vecine cu care acesta este conectat prin drumuri directe (cel mult patru obiective).

Pentru fiecare două obiective care comunică se cunoaște costul asfaltării drumului direct dintre ele.

Cerințe

1. Se dorește realizarea unei hărți a județului în care să apară reprezentate toate obiectivele. Harta se va reprezenta sub forma unei matrice având dimensiunea maximă 50Ž50. Fiecare element al matricei codifică printr-o succesiune de patru cifre binare existența drumurilor directe care încadrează un pătrățel din caroiaj. Dacă pe latura din nord a acestui pătrățel există un drum direct între două obiective, atunci bitul cel mai semnificativ va fi 1. În caz contrar acesta va fi 0. Ceilalți trei biți corespund, în ordine, direcțiilor Sud, Est, Vest. De exemplu, dacă pentru un pătrățel există drumuri pe laturile Nord, Sud și Vest, cei patru biți vor fi: 1 1 0 1. Harta trebuie să aibă suprafață minimă dar să cuprindă toate obiectivele.

2. Se dorește asfaltarea unora dintre drumurile existente astfel încât să se poată ajunge, mergând numai pe drumuri asfaltate de la oricare obiectiv la oricare altul. Costul total al asfaltării trebuie să fie minim. Să se precizeze care dintre drumuri vor fi asfaltate.

Date de intrare

Fișierul de intrare OB.IN are un număr necunoscut de linii, fiecare fiind de forma:

NO nvN cdsN nvS cdsS nvE cdsE nvV cdsV

având semnificația:

NO = număr obiectiv

nvN = număr obiectiv vecin nord

cdsN = cost drum spre nord

nvS = număr obiectiv vecin sud

cdsS = cost drum spre sud

nvE = număr obiectiv vecin est

cdsE = cost drum spre est

nvV = număr obiectiv vecin vest

cdsV = cost drum spre vest

Dacă un anumit obiectiv nu are vecin într-o anumită direcție, numărul vecinului din direcția respectivă va fi înlocuit cu 0, iar costul drumului direct dintre cele două cu 0.

Date de ieșire

Datele de ieșire se scriu în fișierele OB1.OUT și OB2.OUT.

· Fișierul OB1.OUT conține o hartă a obiectivelor folosind numere între 0 și 15. Fiecare număr reprezintă codificarea în baza zece a celor patru cifre binare.

· Fișierul OB2.OUT conține pe prima linie costul optim cerut și pe următoarele linii obiectivele între care se asfaltează drumul.

Restricții

· numărul de obiective este cel mult 2500;

· harta se încadrează într-o matrice de 50 de linii și 50 de coloane;

· lungimile drumurilor directe sunt cel mult 100.

Exemplu

OB.IN OB1.OUT OB2.OUT

1 0 0 0 0 2 3 0 0 1 2 11

3 6 3 0 0 0 0 2 1 14 15 1 2

6 0 0 3 3 0 0 5 2 2 3

2 5 2 0 0 3 1 1 3 6 5

4 0 0 0 0 5 3 0 0 2 5

5 0 0 2 2 6 2 4 3 5 4

Fișierului OB1.OUT îi corespunde următoarea hartă:

Note

· Drumurile directe între obiective sunt bidirecționale.

· Se garantează că datele de intrare nu conțin date incompatibile.

· Se garantează că nici una din dimensiunile hărții nu va depăși 50.

· Punctajele pentru cele două cerințe sunt independente.

Timp maxim de execuție

2 secunde/test

P050012: Călătorie cu taxiul

Cristian Cadar, student, Universitatea Politehnică, București

Un călător dorește să străbată o distanță de n kilometri cu taxiul, astfel încât prețul pe care îl plătește să fie minim. Compania de taximetre pe care această persoană o folosește are un tarif unitar fix de C lei pentru un kilometru, însă are de asemenea câteva oferte speciale de tipul (k,L) cu semnificația că pentru o porțiune de drum de k kilometri călătorul poate să plătească L lei (în locul unui tarif unitar pe numărul de kilometri). Din păcate, aceste oferte sunt foarte ciudate, și dacă nu este atent, călătorul nostru se poate păcăli ușor. De exemplu compania de taximetre poate să ceară pentru 2,43 km un tarif de 1370,89 lei și pentru 3,8 km un tarif de 1509,43 lei. Cum călătorul nostru are dificultăți în manevrarea unor astfel de numere, el vă roagă să-l ajutați să afle modul optim de organizare a excursiei sale, cunoscând atât numărul de kilometri pe care acesta trebuie să-i parcurgă cât și tarifele practicate de compania de taximetre.

Date de intrare

· Pe prima linie a fișierului TAXI.IN se găsește numărul n (nŁ100) de kilometri pe care călătorul trebuie să îi parcurgă.

· Pe cea de-a doua linie se află tariful unitar L practicat de compania de taximetre.

· Următoarele linii (cel mult 100), până la sfârșitul fișierului conțin perechi de forma k C reprezentând ofertele speciale ale companiei. Toate numerele care apar în fișierul de intrare sunt numere reale, strict pozitive, mai mici decât 1000 și cu exact două zecimale.

Date de ieșire

· Prima linie a fișierului TAXI.OUT va conține suma minimă pe care o poate achita călătorul, scrisă cu trei zecimale exacte.

· Următoarea linie va conține o succesiune de numere, reprezentând ordinea în care se face alegerea ofertelor speciale. Aceste numere pot fi atât naturale cât și numere reale negative. Numerele naturale indică a câta ofertă din fișierul de intrare a fost aleasă la un moment dat, iar numerele reale negative indică numărul de kilometri parcurși (în modul), folosind prețul unitar.

Restricții

· 0 < n Ł 100

· 0 < L Ł 1000

· 0 < k Ł 1000

· 0 < C Ł 1000

· Numerele n, L, k, C sunt reale și au maximum câte două zecimale.

Exemplu

TAXI.IN

52.65 // nr. km

0.80 // tarif unitar

8.75 5.50 // 8.75 km cu prețul de 5.5

60.35 20.47 // 60.35 km cu prețul de 20.47

20.40 10.20 // 20.4 km cu prețul de 10.2

TAXI.OUT poate conține:

28.380

-0.69 1 3 3 -2.41

Timp maxim de execuție

2 secunde/test

Clasele a XI-a și a XII-a

P050013: Arbore

Marius Vlad, student, Universitatea Politehnică, București

Se dă un arbore format din n noduri în care fiecare nod are asociat un număr natural nenul.

Cerință

Să se selecteze din arborele inițial un subgraf conex pentru care suma valorilor asociate nodurilor este egală cu un număr natural k dat.

Un subgraf este graful din care se elimină noduri împreună cu muchiile aferente.

Date de intrare

Nodurile arborelui sunt numerotate de la 1 la n, rădăcina fiind nodul numerotat cu 1.

Fișierul de intrare ARBORE.IN, are următoarea structură:

· pe prima linie sunt scrise numerele n și k;

· pe cea de-a doua linie este scrisă valoarea asociată nodului 1 (rădăcina arborelui);

· pe cea de-a treia linie sunt scrise două numere, primul reprezentând nodul părinte al nodului 2, iar al doilea reprezentând valoarea asociată nodului 2;

· pe cea de-a patra linie sunt scrise două numere, primul reprezentând nodul părinte al nodului 3, iar al doilea reprezentând valoarea asociată nodului 3;

...

· pe linia n+1 sunt scrise două numere, primul reprezentând nodul părinte al nodului n, iar al doilea reprezentând valoarea asociată nodului n.

Date de ieșire

Ieșirea se va face în fișierul ARBORE.OUT:

· dacă nu există soluție se va afișa doar numărul -1 pe prima linie;

· dacă există soluție se vor afișa nodurile ce formează un subgraf conex care respectă cerința problemei (câte un singur nod pe fiecare linie).

Restricții

· 1 Ł n Ł 100

· 1 Ł k Ł 1000

· 1 Ł valoarea asociată unui nod Ł 1000

Exemplu

Pentru arborele:

ARBORE.IN ARBORE.OUT poate conține:

10 29 2

30 4

1 7 5

1 22 6

2 5 9

2 10 10

4 1

4 2

5 25

5 2

5 4

Timp maxim de execuție:

3 secunde/test

P050014: Moara

prof. Ion Maxim, Inspectoratul Școlar Județean, Suceava

Motto:

Una-i să sortezi cartoane,

alta-i să sortezi vagoane!

La poarta unei mori se află n saci, etichetați cu numere de la 1 la n, așezați în linie, într-o ordine dată. Sacul cu eticheta i are greutatea gi.

Morarul cere ucenicului său să reașeze sacii în ordinea crescătoare a etichetelor. Cum nu este spațiu de manevră pentru a schimba sacii între ei, ucenicul ia un scaun și-l așează lângă poziția k din șir, alege un sac și-l pune pe scaun, ia alt sac și-l mută în locul gol, apoi aduce alt sac în locul eliberat de acesta etc. sau aduce sacul de pe scaun în locul rămas gol. Repetă procedeul până când sacii ajung în ordinea cerută de morar. Scaunul nu se mută. Efortul depus de ucenic pentru mutatul unui sac, indiferent dacă acesta a fost pus sau nu pe scaun, este egal cu produsul dintre greutatea sacului și distanța pe care a fost transportat sacul. Distanța dintre doi saci alăturați este egală cu unitatea.

Cerință

Se cere să se stabilească poziția amplasării scaunului și ordinea schimbării sacilor între ei, astfel încât ucenicul să facă un număr minim de mutări și efortul depus de acesta să fie minim.

Date de intrare

Fișierul de intrare MOARA.IN conține pe prima linie numărul de saci n și pe liniile următoare, ordinea așezării sacilor, urmată de șirul greutăților sacilor g1,g2,...,gn, unde gi este greutatea sacului cu eticheta i.

Date de ieșire

Fișierul MOARA.OUT va conține pe prima linie numerele p k e, unde p este poziția scaunului, k numărul de mutări și e valoarea efortului depus. Următoarele linii vor conține câte o mutare de forma d s, unde d este poziția destinație și s este poziția sursă, poziția scaunului se va nota cu 0 (zero!).

Restricții

· 2 Ł n Ł 10000

· 1 Ł k Ł n

· 1 Ł gi Ł 255, pentru 1 Ł i Ł n

Exemplu

MOARA.IN MOARA.OUT

5 3 5 25

2 4 3 0 2

5 1 2 1

3 5 1 2 4 1 5

5 4

4 0 (soluția nu este unică!)

Timp maxim de execuție

1 secundă/test

P050015: Puncte

prof. Doru Anastasiu Popescu, Liceul "Radu Greceanu", Slatina

Se dau n puncte situate pe un cerc P1, P2, ..., Pn și un număr natural k. Se cere să se verifice dacă se pot construi k segmente cu ambele capete în mulțimea formată din punctele P1, P2, ..., Pn, astfel încât să nu se formeze nici un triunghi cu vârfurile în aceste puncte. Dacă există mai multe soluții se cere una dintre ele.

Date de intrare

Fișierul de intrare PUNCTE.IN conține pe prima linie numărul n, iar pe a doua linie numărul k.

Date de ieșire

Fișierul PUNCTE.OUT va conține:

- o linie pe care se află caracterul 0, dacă nu există soluție;

- k+1 linii, dintre care, pe prima linie se află caracterul 1 (având semnificația că există soluție), iar pe umătoarele k linii se află câte două numere separate printr-un spațiu (de forma i j având semnificația că PiPj reprezintă un segment), în cazul când există soluție.

Restricții

· 1 Ł n Ł 300

· 1 Ł k Ł 300

Exemplul 1

PUNCTE.IN PUNCTE.OUT

4 0

5

Exemplul 2

PUNCTE.IN PUNCTE.OUT poate conține:

4 1

2 1 4

1 2

Timp maxim de execuție

1 secundă/test

P050016: SICN

prof. Emanuela Cerchez, Liceul de Informatică, Iași

Serviciul de Informații al Comisiei Naționale (SICN) este constituit din n agenți (1 Ł n Ł 150), având numere de cod distincte de la 1 la n și un agent șef codificat cu 0.

Din motive de securitate, nu oricare doi agenți au contacte (informaționale!) directe, dar prin contactele directe existente, oricare doi agenți își pot comunica informații.

Un serviciu este considerat forte dacă și numai dacă nu conține nici un agent prin suprimarea căruia se compromite comunicarea (și ca urmare, să existe agenți care să nu își mai poată transmite informații).

Cerințe

Scrieți un program, care verifică dacă SICN este forte. În plus, dacă SICN nu este forte, programul trebuie să determine:

- verigile slabe ale SICN (agenții prin a căror suprimare se compromite comunicarea);

- toate grupurile de agenți care sunt forte în cadrul SICN, maximale cu această proprietate.

Date de intrare

Fișierul de intrare SICN.IN conține pe prima linie numărul de agenți n, din SICN, (exclusiv șeful), iar pe fiecare din următoarele linii câte o pereche de numere x y unde x, y Î {0, 1, 2, ..., n}, sunt separate printr-un spațiu, și au semnificația x și y au contact direct.

Date de ieșire

Fișierul de ieșire, SICN.OUT, va conține mesajul SICN este forte sau:

· pe prima linie, mesajul SICN nu este forte;

· pe a doua linie, numerele de cod ale agenților care constituie verigile slabe ale serviciului, în ordine crescătoare, separate prin spații;

· pe a treia linie, m - numărul de grupuri forte în cadrul SICN;

· pe fiecare din următoarele m linii, numerele de cod ale agenților fiecărui grup forte, în ordine crescătoare, separate prin spații.

Exemplul 1

SICN.IN SICN.OUT

2 SICN este forte

0 2

0 1

2 1

Exemplul 2

SICN.IN SICN.OUT

3 SICN nu este forte

0 1 0 1

0 3 3

2 1 0 3

1 2

0 1

Timp maxim de execuție

1 secundă/test

P050017: Spioni

prof. Rodica Pintea, Liceul "Grigore Moisil", București

O rețea formată din n spioni, numerotați de la 1 la n, aflați în diferite localități, au o convenție de convocare. Ei vor fi convocați telefonic într-o localitate fixă numită bază. Convenția de transmitere a convocării cuprinde următoarele reguli:

· cu excepția unora, fiecare spion știe ce persoane trebuie să-l contacteze telefonic; pentru a considera convocarea validă și a-i da curs, trebuie să primească semnalul de convocare de la toate persoanele de contact;

· cei câțiva spioni care nu așteaptă nici o convocare știu că trebuie să pornească toți deodată, la o oră considerată ora 0, spre bază;

· fiecare persoană, imediat ce a ajuns la bază, primește lista persoanelor pe care trebuie să le sune, transmițându-le convocarea;

· durata unei convorbiri telefonice este neglijabilă;

· abia în momentul în care sunt prezente toate cele n persoane la bază poate să înceapă ședința.

Cerință

Cunoscându-se, pentru fiecare spion, durata deplasării până la bază (exprimată în ore) și lista persoanelor care trebuie să îl contacteze, scrieți un program care stabilește dacă se poate realiza convocarea tuturor persoanelor. Dacă este posibil, să se determine:

a) numărul minim de ore care trec până când poate să înceapă ședința;

b) numărul minim de persoane care trebuie transportate în regim de urgență astfel încât ședința să poată începe cu cel puțin o oră mai devreme; numim transport în regim de urgență un transport în care, în locul timpului dat, transportul durează cu cel puțin o oră mai puțin;

c) numerele de ordine ale persoanelor care vor fi transportate în regim de urgență.

Date de intrare

Fișierul de intrare SPIONI.IN, conține:

· pe prima linie, numărul n de spioni;

· pe a doua linie, n numere naturale t1, t2, ..., tn, despărțite prin câte un spațiu, numere reprezentând durata deplasării fiecărui spion până la bază (în regim normal), durată exprimată în ore;

· pe fiecare dintre următoarele n linii, câte o succesiune de cel puțin 0 și cel mult n numere naturale despărțite prin câte un spațiu, numerele de pe linia i+2 a fișierului reprezentând lista persoanelor care trebuie să convoace persoana având numărul i, pentru ca aceasta să pornească spre bază.

Datele de ieșire

Pe prima linie a fișierului SPIONI.OUT se află numărul -1 dacă nu se poate realiza convocarea, sau numărul de ore după care poate să înceapă ședința, în caz contrar. În cazul în care convocarea este posibilă, fișierul mai conține:

· pe a doua linie, un număr p, reprezentând numărul de persoane care, transportate în regim de urgență, pot devansa ora de începere a ședinței cu cel puțin o oră;

· pe a treia linie, numerele de ordine ale persoanelor care trebuie să fie transportate în regim de urgență, pentru a putea începe ședința mai devreme, numere despărțite prin câte un spațiu.

Restricții

· 1 Ł n Ł 100

· 2 Ł ti Ł 500

Exemplu

SPIONI.IN SPIONI.OUT poate conține:

5 18

9 8 3 9 1 1

4

1 3 5

2 3

Timp maxim de execuție

3 secunde/test

P050018: Tezaur

prof. Doru Anastasiu Popescu, Liceul "Radu Greceanu", Slatina

Într-un document arheologic recent descoperit se face referire la un mare tezaur. Datorită faptului că documentul poate fi interpretat în mai multe moduri se face apel la n arheologi care vor studia independent documentul.

La terminarea studiului, fiecare arheolog întocmește o hartă pe care marchează o zonă poligonală închisă și convexă despre care presupune că este locul unde se află tezaurul.

Deoarece fondurile alocate pentru descoperirea tezaurului sunt reduse, se ia hotărârea să se înceapă cercetările pe teren, doar în zona, precizată de toți arheologii.

Cerință

Cunoscând valoarea n și coordonatele vârfurilor zonelor determinate de arheologi, să se determine aria suprafeței de pe hartă, precizată de toți arheologii (intersecția celor n zone).

Date de intrare

Fișierul de intrare TEZAUR.IN conține:

n - numărul de zone;

m[1] - numărul de vârfuri pentru zona primului arheolog

x11 y11 ... x1m[1] y1m[1] - coordonatele vârfurilor zonei primului arheolog (date în sens invers acelor de ceasornic);

...

m[n] - numărul de vârfuri pentru zona ultimului arheolog

xn1 yn1 ... xnm[n] ynm[n] - coordonatele vârfurilor zonei celui de-al n-lea arheolog (date în sens invers acelor de ceasornic).

Date de ieșire

Pe prima linie a fișierului TEZAUR.OUT se va scrie aria zonei de pe hartă, precizată de toți arheologii, cu două zecimale.

Dacă nu există suprafață comună zonelor celor n arheologi, în fișierul de ieșire se va scrie numărul 0.

Exemplu

TEZAUR.IN TEZAUR.OUT

3 400.00

4

-20 30 -20 -20 40 -20 40 30

5

10 80 10 -30 60 -50 100 60 70 80

4

20 10 70 10 70 60 20 60

Restricții

· 1 Ł n Ł 30;

· 3 Ł m[i] Ł 20, iÎ{1,2,...,n};

· Coordonatele vârfurilor zonelor sunt numere întregi din intervalul [-1000,1000];

· Numărul din fișierul de ieșire se va scrie cu 2 zecimale.

Timp maxim de execuție

1 secundă/test

Baraj

P050019: Antene

prof. Dana Lica, Liceul "Ion Luca Caragiale", Ploiești

Firmele de telefonie mobilă Dialog și Connex urmează să-și instaleze antene satelit într-un spațiu comun. În acest scop, se realizează o hartă sub forma unui caroiaj dreptunghiular, unde se dau N puncte prin coordonate naturale, reprezentând punctele în care vor fi instalate antene pentru cele două firme.

Managerul Oficiului Concurenței dorește ca nici una din firme să nu fie dezavantajată. Astfel, ea stabilește următoarea condiție care trebuie să fie respectată:

· orice dreaptă paralelă cu axa Ox sau Oy trasată printr-un punct de coordonate naturale intersectează un număr de antene ale firmei Connex, număr care diferă cu cel mult 1 de numărul de antene ale firmei Dialog intersectate de aceeași dreaptă. Altfel spus, modulul diferenței dintre numărul antenelor Connex și numărul antenelor Dialog situate pe aceeași dreaptă este cel mult 1.

Cerință

Cunoscându-se coordonatele celor N puncte, să se realizeze o distribuire a tuturor punctelor între cele două firme, astfel încât restricția impusă de managerul Oficiului Concurenței să fie respectată.

Date de intrare:

· Prima linie a fișierului de intrare ANTENE.IN conține numărul de puncte (N).

· Pe fiecare din următoarele N linii sunt scrise câte două numere x y, despărțite printr-un spațiu, reprezentând coordonatele fiecărui punct în care se va instala o antenă.

· Coordonatele punctelor sunt numere naturale cuprinse între 0 și 30000.

Date de ieșire

Fișierul de ieșire ANTENE.OUT va conține N linii:

· pe fiecare linie se vor scrie trei numere despărțite prin câte un spațiu: x y c; primele două numere (x, y) reprezintă coordonatele unui punct din caroiajul dat, în care este permisă amplasarea unei antene, iar ultimul număr (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 fișierul de ieșire poate fi oarecare.

Restricție

N Ł 8000

Exemplu

ANTENE.IN ANTENE.OUT

6 1 3 1

4 1 2 3 -1

3 2 2 4 1

1 3 3 4 -1

2 3 4 1 1

2 4 3 2 1

3 4

Timp maxim de execuție

2 secunde/test

P050020: Solitaire

prof. Emanuela Cerchez, Liceul de Informatică, Iași

Un jucător solitar a inventat următorul joc. El desenează pe o foaie de hârtie n puncte.

Jocul constă în construirea unor segmente după următoarele reguli:

- orice segment unește două din cele n puncte;

- orice punct poate să fie extremitatea a cel mult un segment și nu poate să aparțină interiorului segmentelor;

- oricare două segmente nu se intersectează;

- jocul continuă până când nu se mai poate trasa nici un astfel de segment.

Scopul jocului este de a trasa segmente astfel încât, în final, numărul de puncte rămase izolate (care nu reprezintă extremitățile unor segmente) să fie minim.

Cerință

Scrieți un program care să joace acest joc.

Date de intrare

Din fișierul de intrare JOC.IN se citesc:

n - numărul 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 ieșire

Rezultatele se vor scrie în fișierul JOC.OUT sub forma:

P - numărul de puncte rămase izolate;

K - numărul de segmente construite;

x11 y11 x12 y12 - coordonatele carteziene ale extremităților primului segment;

x21 y21 x22 y22 - coordonatele extremităților celui de-al doilea segment;

...

xk1 yk1 xk2 yk2 - coordonatele carteziene ale extremităților segmentului k.

Restricție

n Ł 200

Timp maxim de execuție

1 secundă/test

P050021: Moșteniri duble

prof. Roxana Tâmplaru, Liceul "Ștefan Odobleja", Craiova

Ministrul de Finanțe din Simot a decis să pună impozit pe moștenirile duble.

În registrul de stare civilă (cu ajutorul căruia se va stabili câte impozite se pot încasa) apar n persoane, numerotate de la 1 la n.

O persoană care nu figurează ca moștenitor al nici unei persoane este denumită strămoș.

O persoană care este moștenitor direct al cuiva, dar nu are nici un moștenitor (direct sau indirect) este denumită terminal.

Celelalte persoane care moștenesc de la una sau mai multe persoane și au unul sau mai mulți moștenitori sunt denumiți tranzienți.

Numim succesiune de moștenitori o secvență de persoane p1, p2, ..., pk, unde p1 este strămoș, p2, ..., pk-1 sunt tranzienți, pk este terminal, iar pi este moștenitorul direct al lui pi-1, pentru oricare iÎ{2,...,k}.

Se impozitează doar persoanele terminale, beneficiare de moșteniri duble, știind că o persoană plătește câte un impozit pentru fiecare moștenire dublă. Numim moștenire dublă a unui terminal două succesiuni distincte de moștenitori care au același strămoș. Se consideră că două succesiuni sunt distincte dacă există cel puțin o persoană tranzientă care apare într-o succesiune și nu apare în cealaltă.

Dacă persoana i este moștenitorul direct sau indirect al persoanei j, nu se poate întâmpla ca persoana j să fie moștenitor direct sau indirect al persoanei i.

Cerință

Scrieți un program care stabilește numărul total de impozite care pot fi încasate.

Date de intrare

· Prima linie a fișierului de intrare MOST.IN conține numărul de persoane n.

· De pe următoarele n linii se citesc, pentru fiecare persoană numerele de ordine ale persoanelor de la care persoana respectivă a moștenit direct (de pe linia i+1 se citesc numerele de ordine ale persoanelor de la care a moștenit direct persoana i). Fiecare linie se termină cu zero.

Date de ieșire

În fișierul de ieșire MOST.OUT se va scrie numărul total de impozite.

Restricție

N Ł 200

Exemplul 1

MOST.IN MOST.OUT

14 5

0

0

0

0

1 0

5 0

8 0

1 2 0

1 3 0

3 4 0

6 7 12 0

9 0

10 0

7 12 13 0

Explicație

Sunt 5 impozite pe 5 moșteniri duble.

Primul impozit îl plătește persoana 11 care a moștenit de la persoanele 6 și 7 (care au persoana 1 ca strămoș). Al doilea impozit îl plătește tot persoana 11 datorită moștenirilor de la persoanele 6 și 12 (care au persoana 1 ca strămoș). Al treilea impozit îl va plăti tot persoana 11 datorită moștenirilor primite de la persoanele 7 și 12 (care au pe persoana 1 ca strămoș).

Al patrulea impozit îl plătește persoana 14 care a moștenit de la persoanele 7 și 12 (care au persoana 1 ca strămoș). Al cincelea impozit, îl plătește tot persoana 14 care moștenește de la persoanele 12 și 13 (care au persoana 3 ca strămoș).

Exemplul 2

MOST.IN MOST.OUT

14 0

0

0

0

0

1 0

5 0

8 0

2 0

3 0

4 0

6 7 0

9 0

10 0

12 13 0

Exemplul 3

MOST.IN MOST.OUT

4 1

0

1 0

1 2 0

3 0

Explicație

Impozitul este plătit de persoana 4 pentru care cele două succesiuni distincte sunt: 1, 2, 3, 4 și 1, 3, 4, strămoșul comun fiind persoana 1.

Timp maxim de execuție

2 secunde/test

P050022: Multiplu

prof. Ovidiu Domșa, Colegiul "Horea, Cloșca și Crișan", Alba Iulia

Se dă un număr natural n și k cifre distincte nenule.

Cerință

Să se găsească cel mai mic număr natural m, multiplu al lui n, format numai cu cifrele date.

Date de intrare

· Prima linie a fișierului de intrare MULTIPLU.IN conține valorile n și k separate printr-un spațiu.

· A doua linie conține cele k cifre separate prin câte un spațiu.

Date de ieșire

Dacă problema are soluție, în fișierul MULTIPLU.OUT se va scrie numărul m. În cazul în care nu există soluție, în fișierul MULTIPLU.OUT se va scrie mesajul NU.

Restricție

1 Ł n Ł 10000, 1 Ł k Ł 9

Exemplul 1

MULTIPLU.IN MULTIPLU.OUT

3458 4 31122

1 3 5 2

Exemplul 2

MULTIPLU.IN MULTIPLU.OUT

15 5 NU

1 3 4 7 9

Timp maxim de execuție

1 secundă/test

P050023: Parantezări

Mihai Oltean, doctorand Universitatea Babeș Bolyai, Cluj

Se consideră mulțimea șirurilor de N perechi de paranteze rotunde împerecheate corect.

Această mulțime se consideră ordonată lexicografic crescător, știind că '(' < ')'.

Cerință

Dându-se un șir de paranteze se cere să se determine numărul lui de ordine, știind că prima configurație

(((...(())...)))

are numărul de ordine 1.

Date de intrare

Prima linie a fișierului de intrare PAR.IN conține numărul N, iar a doua linie conține șirul de paranteze.

Date de ieșire

În fișierul de ieșire PAR.OUT se va scrie un număr întreg. Acest număr trebuie să reprezinte numărul de ordine al parantezării date, în șirul ordonat lexicografic crescător al tuturor parantezărilor corecte formate din N perechi de paranteze.

Restricție

1 Ł n Ł 30

Exemplul 1

PAR.IN

3

((()))

PAR.OUT

1

Exemplul 2

PAR.IN

4

()()()()

PAR.OUT

14

Exemplul 3

PAR.IN

2

()()

PAR.OUT

2

Exemplul 4

PAR.IN

4

()()(())

PAR.OUT

13

Timp maxim de execuție

1 secundă/test

P050024: Vânătorii

Cristian Cadar, student Universitatea Politehnică București

Marius Vlad, student Universitatea Politehnică București

Cristi și Marius s-au hotărât într-o zi să se ducă la vânătoare. Cristi are o pușcă destul de prăpădită cu care poate vâna doar lupi. Marius în schimb, care tocmai și-a luat bursa, are o pușcă performantă cu care poate vâna și lupi și mistreți. Ajunși în pădure, ei își dau seama că vânătoarea nu e treabă ușoară; ei trebuie să alerge mult după fiecare animal. Având la dispoziție un număr de doar T minute alocate pentru vânătoare și dorind să vâneze în acest timp cât mai multe animale (lupi și mistreți) ei au calculat, pe baza unor informații date de pădurar, câte minute trebuie să alerge după fiecare animal în parte.

Cerință

Scrieți un program care determină câte animale trebuie să vâneze Cristi și Marius pentru ca împreună să aducă acasă un număr maxim de animale.

Date de intrare

· Prima linie a fișierului de intrare VANATORI.IN conține numărul T, reprezentând durata maximă a vânătorii.

· Pe cea de-a doua linie sunt scrise două numere L și M, reprezentând numărul de lupi respectiv de mistreți, despărțite printr-un spațiu.

· Pe cea de-a treia linie se găsesc L numere întregi, fiecare număr ti (i=1,L) reprezentând timpul în care poate fi vânat fiecare dintre cei L lupi.

· Cea de-a patra linie conține M numere întregi, fiecare număr ui (i=1,M) reprezentând timpul în care poate fi vânat fiecare dintre cei M mistreți.

Date de ieșire

Pe prima linie a fișierului de ieșire VANATORI.OUT se va scrie un singur număr, reprezentând numărul maxim de animale pe care le pot vâna Marius și Cristi.

Restricții:

· 1 Ł T Ł 300

· 0 Ł L Ł 600

· 0 Ł M Ł 600

· 0 Ł ti,ui Ł T

Exemplu

VANATORI.IN

5

4 2

2 1 1 2

5 4

VANATORI.OUT

5

Explicație

Cristi vânează primul, al doilea și al patrulea lup, iar Marius al treilea lup și al doilea mistreț.

Timp maxim de execuție

10 secunde/test

[cuprins]