	1. Problema trateaza un joc de carti de tip solitaire, numit "10-20-30".
Se joaca cu un pachet de 52 carti de joc, in care culorile nu conteaza. 
Valoarea unei figuri (rege, dama, valet) este 10. Valoarea asului este 1. 
Celelalte carti au valorile inscrise pe ele (2,3,4,..). Pachetul de carti 
este pus pe masa si cartea accesibila este totdeauna cea de deasupra.
	Jocul incepe cu asezarea a 7 carti una langa alta, formand baza a 
sapte pachete. Pachetele se parcurg de la stanga la dreapta, dupa care se 
revine la primul pachet din stanga.
	La fiecare moment se ia o carte din pachetul principal si se aseaza 
- cu fata in sus, ca ultima carte - pe unul din pachetele formate in timpul 
jocului.
Se verifica daca o combinatie de 3 carti din acest pachet totalizeaza 10,
20 sau 30 puncte. Combinatiile permise sunt:
- primele 2 carti si ultima;
- ultimele 2 carti si prima;
- ultimele 3 carti.
	Daca se realizeaza suma ceruta, cartile din combinatie sunt scoase si
puse la baza pachetului principal. Cartile sunt stranse in ordinea in care 
apar si puse in pachet. Scoaterea a trei carti poate permite ca o alta 
combinatie de 3 carti din pachet sa verifice conditia de a fi stranse. 
Se face acest lucru cat timp este posibil.
	Sa presupunem de exemplu ca un pachet contine cartile 5 9 7 3 (in 
ordine de jos in sus) si se joaca 6; deci pachetul va fi 5 9 7 3 6. 
Primele doua carti si cu ultima fac 20 (5+9+6=20). Aceste trei carti sunt 
scoase, puse la baza pachetului principal, care va fi acum (de jos in sus) 
6 9 5 ..... In pachetul de joc au ramas doua carti: 7 3.
Daca in loc de 6 s-ar fi jucat D (dama), pachetul ar fi: 5 9 7 3 D. 
In aceasta situatie ultimele trei carti ar face 7+3+10=20 si ele sunt scoase. 
Pachetul de joc ramane cu 5 9 iar cel principal etse de forma D 3 7 ...
Daca sunt luate toate cartile unui pachet, acesta este eliminat din joc.
Jocul se considera castigat daca in final sunt eliminate toate cele sapte 
pachete. Daca pachetul principal se epuizeaza si au mai ramas pachete in joc,
jocul este pierdut. Mai este posibila remiza, cand cele aceste doua situatii 
nu apar (jocul cicleaza).
Scrieti un program care sa joace 10-20-30 plecand de la o configuratie 
initiala data a pachetului de carti de joc.
Intrare:
	In fisierul 10-20-30.in sunt mai multe seturi de date de intrare.
	Un set de intrare consta din 52 numere intregi separate prin spatii 
si/sau end-of-line; numerele reprezinta valorile cartilor din pachetul 
principal. Primul numar corespunde cartii din topul pachetului (cu care 
incepe jocul). Dupa ultimul set de date de intrare se scrie o linie de forma
0
Iesire:
Pentru fiecare set de date de test se tipareste pe ecran o linie in care se
anunta rezultatul jocului (castiga, pierde, egal) si de cate ori este jucata o
carte inainte de a se decide rezultatul jocului (?). Formatul de iesire va fi
conform cu cel din exemplu.
Exemplu:
Pentru intrarea:
2 6 5 10 10 4 10 10 10 4 5 10 4 5 10 9 7 6 1 7 6 9 5 3 10 10 4 10 9 2 1
10 1 10 10 10 3 10 9 8 10 8 7 1 2 8 6 7 3 3 8 2
4 3 2 10 8 10 6 8 9 5 8 10 5 3 5 4 6 9 9 1 7 6 3 5 10 10 8 10 9 10 10 7
2 6 10 10 4 10 1 3 10 1 1 10 2 2 10 4 10 7 7 10
10 5 4 3 5 7 10 8 2 3 9 10 8 4 5 1 7 6 7 2 6 9 10 2 3 10 3 4 4 9 10 1 1
10    5 10 10 1 8 10 7 8 10 6 10 10 10 9 6 2 10 10
	apare la iesire:
castiga: 66
pierde: 82
egal: 73
========================================

	2. Cu multi ani in urma, memoria primara a calculatoarelor se baza pe
discurile magnetice.

		       xxx
		     x     x
		   x         x
	    ->	  x     o     x
		   x         x
		     x     x
		       xxx

	In sectiune axiala, un disc era format din mai multi cilindri care
se roteau intr-un singur sens in jurul unei axe, trecand prin fata unui cap de 
citire/scriere fix (vezi figura).
	Instructiunile si datele erau inscrise pe cilindru in mod secvential.
Dupa ce citea o instructiune, calculatorul trecea la executarea ei; din 
nefericire, in acest timp, discul continua sa se roteasca, asa ca dupa ce se 
termina executia instructiunii, capul de citire/scriere nu mai era la pozitia 
imediat urmatoare instructiunii executate. Pentru a minimiza intarzierea 
provocata de readucerea discului la pozitia urmatoarei instructiuni, 
programatorii includeau adresele instructiunilor urmatoare pe campuri explicite 
ale instructiunii executate (deci fiecare instructiune avea unul sau mai multe 
campuri rezervate adreselor instructiunilor urmatoare). In acest fel, daca se 
cunostea deplasarea medie a discului in timpul executiei unei instructiuni, 
instructiunile urmatoare puteau fi plasate pe cilindru in asa fel incat sa se 
ajunga la ele rotind cat mai putin discul.
	In aceasta problema vrem sa determinam timpul mediu de executie al unor 
programe simple, fara cicluri. Vom considera discul format dintr-un singur 
cilindru, cu un singur cap de citire. Pe cilindru, fiecare instructiune ocupa 
un cuvant iar cuvintele au adrese secventiale numerotate de la 1 la n; cand 
cilindrul se roteste, prin fata capului de citire/scriere apar cuvintele de 
adrese 1,2,..,n,1,2,...
	Toate instructiunile necesita acelasi timp de executie t, considerat 
ca timpul in care discul se roteste cu t cuvinte. Timpul de trecere al unui 
cuvant prin fata capului de citire/scriere (indiferent daca acel cuvant 
este citit sau nu) ia o unitate de timp.
	Exista trei tipuri de instructiuni: terminale, conditionale si 
neconditionale. Instructiunile terminale nu contin adresa unei "instructiune 
urmatoare" deoarece ele termina programul; cele conditionale au doua adrese de 
"instructiuni urmatoare" iar o instructiune neconditionala are o singura 
astfel de adresa.
	Timpul de executie al unui program este timpul luat de la inceputul
citirii primei instructiuni pana la sfarsitul executiei unei instructiuni 
terminale. Pentru a calcula timpul mediu de executie al unui program, orice 
timp posibil de executie este inmultit cu probabilitatea de a fi executat. 
Presupunem ca toate drumurile posibile printr-un program (urmand variantele 
indicate de instructiunile conditionale) au probabilitati egale de executie. 
Suma tuturor timpilor medii de executie formeaza timpul mediu de executie al 
programului.
Ipoteze:
- La inceputul fiecarui test discul este pozitionat astfel incat instructiunea
de la locatia 1 este gata de a fi citita;
- Orice program incepe executia cu cuvantul de la locatia 1;
- Exista cel putin o instructiune terminala.
Intrare:
Fisierul de intrare (drum.in) contine mai multe cazuri de test.
Un caz de test incepe cu o linie
n t   unde 1<n<50, 0<t<n
Urmeaza o secventa de linii, fiecare din ele continand numere intregi care
reprezinta adresa unei instructiuni urmata de zero, una sau doua adrese. 
Mai exact, pentru fiecare instructiune exista o locatie (intre 1 si n), 
numarul de adrese p ale "instructiunilor urmatoare" (0 pentru instructiunea 
terminala, 1 pentru neconditionale, 2 pentru conditionale) si p adrese de 
ramificatii. Ultima instructiune este urmata de o linie cu un 0.
Intrarea se termina cu o linie
0 0
Iesire:
Se scrie pe ecan numarul testului (incepand cu 1) si timpul mediu de executie
al programului. Timpii sunt numere reale scrise cu patru cifre zecimale.
Exemplu:
Pentru intrarea:
10 5
1 0
0
10 5
1 1 6
6 0
0
10 5
1 1 7
7 0
0
10 5
1 2 7 8
7 0
8 0
0
10 6
8 0
7 1 3
3 0
1 2 7 8
0
0 0
	iesirea va fi:
Cazul 1. Timp de executie = 6.0000
Cazul 2. Timp de executie = 21.0000
Cazul 3. Timp de executie = 12.0000
Cazul 4. Timp de executie = 12.5000
Cazul 5. Timp de executie = 26.5000
=========================================================

	3. O retea de autoamte nedeterministe (NTA) este o masina paralela
formata din procesori identici cu stari finite aranjati intr-o retea 
triunghiulara infinita. In varf se afla un singur procesor; pe linia urmatoare
sunt doi procesori si fiecare linie are cu un procesor mai mult decat linia
precedenta. Fiecare procesor este conectat la cei doi procesori aflati sub el.
Calculul in NTA se face de jos in sus: starea fiecarui procesor de pe o linie
este bazata pe starile procesorilor de sub el de care este legat, si de o
tabela de tranzitie. Intrarea in NTA este configuratia initiala a unei linii de
procesori. Ea este specificata de un sir care da starea initiala a fiecarui
procesor din linie; un sir de n caractere specifica starea initiala a unei 
linii formata din n procesori. Calculele urca in NTA pana in varf, in mod 
nedeterminist.
	Anumite stari sunt identificate ca fiind stari de acceptare. Unele
tranzitii sunt calculate nedeterministic. O intrare este acceptata daca exista
un calcul care conduce procesorul din varf intr-o stare de acceptare. 
O intrare este respinsa daca nici un calcul nu conduce la o stare de 
acceptare pentru procesorul din varf.
	De exemplu, tabela urmatoare arata tranzitia pentru un NTA cu 3 stari,
notate prin caracterele 'a','b','c'; starea de acceptare este 'c'.

Multimea starilor: {a,b,c}
Stare de acceptare: {c}
Tabela de tranzitie:

		         |    a    b    c         <- descendent drept
		       --|---------------------
		      a  |    a    a    c
Descendent stang ->   b  |   a,c   a    b
		      b  |    c    b    a

	Diagrama urmatoare arata modalitatea de calcul pentru intrarea 'bba'.
Calculul din stanga respinge intrarea deoarece starea din varf este 'a';
calculul din dreapta accepta intrarea deoarece s-a ajuns la procesorul din varf
cu starea 'c'. Deoarece a existat o modalitate de calcul care a condus la o
stare de acceptare in varf, cuvantul 'bba' este acceptat de NTA.

                     a                                   c
                  /     \                             /     \
                a         a                         a          c
             /     \   /     \                   /     \    /     \
           b         b         a               b          b         a

Cuvantul 'bbb' ar fi respins de NTA deoarece se ajunge in varf numai cu starea
'a', care nu este de acceptare.
Intrare:
Starile (si intrarile) unui NTA sunt litere mici consecutive de la inceputul
alfabetului. Starile de acceptare sunt grupate la sfarsitul literelor; 
un NTA cu 5 stari dintre care doua de acceptare va avea multimea starilor 
{a,b,c,d,e} si multimea starilor de acceptare {d,e}.
Pot fi cel mult 15 stari si cel mult 15 caractere intr-o configuratie initiala.
Fisierul de intrare trellis.in contine o secventa de descrieri de NTA si de 
configuratii initiale. O descriere de NTA inepe cu o linie de forma
n t
unde n este numarul de stari iar t, numarul de stari acceptabile. Urmeaza nxn
linii, pe fiecare linie fiind dat un element al tabelei de tranzitie (citita 
pe linii). Fiecare descriere de NTA este urmata de o secventa de configuratii
initiale, cate una pe linie. Datele referitoare la un set de teste se 
termina cu
#
Fisierul de intrare se termina cu
0 0
Iesire:
Pentru fiecare descriere a unui NTA, se scrie pe ecran numarul NTA (NTA 1, 
NTA 2, etc). Pentru fiecare configuratie initiala se scrie o linie care 
contine unul din cuvintele 'acceptat' sau 'respins', urmat de configuratia 
initiala respectiva.
Pentru clarificari se va urmari exemplul de mai jos.
Exemplu:
Pentru intrarea:
3 1
a
a
c
ca
a
b
c
b
a
bba
aaaaa
abab
babbba
a
baaab
abbbaba
baba
bcbab
#
3 2
ab
a
c
a
ab
b
c
b
ab
abc
cbc
#
0 0
	iesirea este:
NTA 1
acceptat bba
respins  aaaaa
respins  abab
acceptat babbba
respins  a
acceptat baaab
acceptat abbbaba
acceptat baba
respins  bcbab

NTA 2
respins  abc
acceptat cbc
=========================================

	4. ACM (Allied Container Movers) este o companie de transport care asigura
livrarea marfii in timpul noptii. ACM are o retea de distributie cu mai multe
centre intermediare de pregatire a containerelor, numite ICPC. La un ICPC, un
trailer care vine este golit la o usa de descarcare. Marfa destinata centrului
este preluata imediat cu confirmare de primire. Incarcaturile de tranzit sunt
redistribuite la alte usi (de tranzit) pe baza urmatoarei destinatii; acolo 
ele sunt incarcate in alte trailere care asteapta.
	Fiecare ICPC are mai multe usi de descarcare pentru preluarea marfii 
de la trailerele venite. Daca numarul de trailere care trebuiesc descarcate 
depaseste numarul de usi de descarcare, ele sunt asezate intr-o coada pana la 
eliberarea unei usi. Un trailer poate avea marfa pentru mai multe ICPC-uri 
diferite. Trailerele cu marfa destinata numai pentru ICPC-ul local primesc o 
prioritate de acces mai mica la usile de descarcare decat trailerele cu 
incarcatura de tranzit. De asemenea, trailerele cu incarcatura de tranzit care 
au o destinatie finala mai apropiata au o prioritate mai mica decat cele cu 
destinatie mai departata.
Timpul de descarcare al unui container si - daca este necesar - de reincarcare 
a marfurilor sale in unul sau mai multe trailere de tranzit, este constant:
2 ore (indiferent de numarul si marimea marfurilor). Un trailer de tranzit 
pleaca spre destinatie imediat ce este plin sau daca toate marfurile 
asteptate in acea zi la destinatie au fost incarcate. Marfurile sunt masurate 
in procente de volum ale trailerului si pot fi divizate in cel mai apropiat 
procent necesar umplerii unui trailer. Timpul scurs intre plecarea unui 
trailer de la o usa si sosirea altuia, este neglijabil.
	Pentru a ajuta ACM sa realizeze eficient aceasta retea de distributie, 
trebuie sa scrieti un program care sa determine timpul mediu de asteptare al 
unui trailer pentru a avea acces la o usa de descarcare si sa identificati 
acele marfuri care nu vor ajunge in totalitate la destinatie (intermediara 
sau finala).
Intrare:
Intrarea descrie o submultime posibil disjuncta a retelei de ICPC si modelele 
de trafic care trebuie analizate.
Pe prima linie a fisierului de intrare truck.in se afla un intreg n (1<=n<=100)
care da numarul de descrieri de ICPC care trebuie analizate. Urmeaza n 
descrieri, fiecare referitoare la un ICPC. O descriere incepe cu o linei de 
forma
c s d
	unde c (0<=c<=99) este numarul centrului, s (0<=s<=10) este numarul de
usi de descarcare din centru, d (0<=d<=10) este numarul de usi de tranzit ale 
centrului c.
	Urmeaza d linii, cate una petnru fiecare usa de tranzit. Fiecare linie 
este de forma:
r v l
	unde r (0<=r<=99) este numarul centrului de tranzit, v (0<=v<=900) este 
volumul total de marfa pentru acel centru in ziua respectiva, exprimat ca un 
procentaj de volum de trailer, iar l (0<=l<=1440) este ultimul timp acceptabil 
pentru ca marfa sa ajunga la centrul r, exprimat in minute de la inceputul 
zilei (v>100 indica faptul ca sunt necesare mai multe trailere).

	A doua parte a intrarii descrie o parte a traficului din acea zi. Ea
incepe cu linia
m
	unde m (1<=m<=100) indica numarul inregistrarilor trailerelor care vin.
Fiecare inregistrare incepe cu o linie de forma
a c s
	unde a (0<=a<=1440) este timpul de sosire al trailerului la centrul c, 
exprimat in minute de la inceputul zilei iar s (0<=s<=10) este numarul de 
marfuri din trailer. Urmeaza s linii de descriere, cate una pentru fiecare 
marfa; o astfel de linie este de forma:
i o r v t
	unde i (0<=i<=99) este codul de identificare al marfii, o - numarul de
origine al centrului, r - numarul centrului de destinatie al marfii, v - 
volumul marfii (exprimat ca un procent din volumul trailerului), iar t este 
timpul de deplasare de la c la r, masurat in minute (t=0 daca c=r).
	Inregistrarile sosirilor sunt ordonate crescator dupa valorile lui a.
Nu exista doua inregistrari cu aceeasi pereche (a,c). Toate numerele centrelor 
folosite ca valori pentru 'c' si 'r' trebuie sa fie definite anterior in prima 
parte a fisierului de intrare; pentru 'o' acest lucru nu este necesar.
Iesire:
	Pentru fiecare din cele n ICPC-uri, programul va trebui sa scrie o 
linie pe ecran, in care sa dea timpul mediu de asteptare la usile de 
descarcare, in una din formele:
Timpul mediu de asteptare la o usa de descarcare la centrul c este ###.# minute.
Nu se asteapta la usile de descarcare ale centrului c.
	Timpul mediu este afectat numai de trailerele care asteapta cel putin 
un minut la o usa de descarcare.
	Programul va lista apoi toate marfurile care nu vor ajunge in 
totalitate la destinatie (finala sau intermediara). Ele vor apare intr-un 
tabel al carui cap este de forma:
Marfurile intarziate sunt:
Id Origine Destinatie Volum
Exemplu:
Pentru intrarea:
2
0 1 1
    8 40 600
8 3 4
    6 115 1200
    2  95 1260
   10 100 1440
    4  55 1380
7
500 0 1
   17 11 8 40 80
700 8 3
   24 11  8  45   0
   18 11  6  40 120
   23 11 10  15 600
720 8 1
   16  3  8 100   0
750 8 2
    4 15  2  50 180
    7 15  6  50 120
760 8 4
   14  3  4  20 300
   27  3  2  20 180
   33  3 10  35 600
   16  3  6  25 120
780 8 2
   12  9  2  25 180
   15  9  4  35 300
800 8 1
   19 18 10  50 600
	iesirea va fi:

Nu se asteapta la usile de descarcare ale centrului 0.
Timpul mediu de asteptare la o usa de descarcare la centrul 8 este 63.3 minute.
Marfurile intarziate sunt:
Id Origine Destinatie Volum
17      11          8    40
23      11         10    15
33       3         10    35
19      18         10    50
==========================================

	5. Etajele unei cladiri sunt numerotate secvential cu numere intregi 0,1,2,..,N 
(N<=15). In cladire functioneaza K(1<=K<=4) lifturi. Controlul liftului este 
centralizat si accepta doua tipuri de apel prin apasare pe butoane.
Butoanele externe (unul pentru solicitarea de urcare, celalalt pentru 
solicitarea de a cobori) se gasesc pe fiecare etaj si sunt comune tuturor 
lifturilor. Butoanele interne (pentru solicitarea de a ajunge la un anumit 
etaj) se afla in fiecare lift.
   Scrieti un program care sa modeleze controlul liftului pe baza umratoarelor
conditii:
1. Exista un singur lift in cladire (K=1) si el accepta o singura solicitare
la un moment. Orice alta cerere este luata in considerare dupa indeplinirea
celei precedente.
2. Exista mai multe lifturi in cladire (K>=1). Fiecare din ele accepta o cerere
numai daca nu executa o alta solicitare. Aparatul de control al liftului poate
inregistra mai multe solicitari in acelasi timp. Solicitarile interioare sunt
indeplinite de liftul unde sunt inregistrate. Fiecare cerere externa este 
repartizata de control unui lift liber.
3. Pentru acelasi caz ca la (2), se introduce restrictia ca lifturile cu numar
par sa se opreasca numai la etajele pare iar cele cu numar impar, la etajele
impare. Toate lifturile opresc la etajul 0 (parter).
4. Sa consideram cazul (3) si sa presupunem ca pot fi mai multe cereri interne
pentru fiecare lift, nu numai una. Toate cererile interne sunt inregistrate si
acceptate, indiferent daca un lift este liber sau nu.
	Conditii suplimentare:
Se considera ca toate lifturile sunt sincronizate si ca la intervale de timp
egale cu unitatea fiecar elift este la un anumit etaj. La momentul de timp
urmator, un lift poate trece la etajul urmator (sus sau jos) sau poate ramane
la acelasi etaj. Solicitarile (intrari in program) pot fi facute la orice 
moment si sunt de urmatoarele tipuri:
a) externe: <numarul etajului, directia miscarii (sus sau jos)>;
b) interne: <numarul liftului, numarul etajului>.
La fiecare moment pot fi inregistrate zero, una sau mai multe solicitari.
La fiecare moment programul va afisa informatia referitoare la pozitia 
fiecarui lift.
Lifturile sunt suficient de mari si nu pot fi supraincarcate.
Programul va controla lifturile dupa o strategie cat mai "inteligenta" posibil.
=====================================

	6. Proprietarul unui mic bussines este atat de ocupat incat agenda sa de
intalniri este programata cu doua saptamani avans. El cere sa se scrie un
program care sa-l ajute in automatizarea acestui proces. Saptamana sa de lucru
tine de luni pana vineri, intre orele 9.00 si 17.00; pauza de pranz este zilnic
intre 12.30 si 13.30.
	In timpul saptamanii el colecteaza solicitarile de intalnire facute cu 
doua saptamani inainte, in ordinea in care au fost facute. Programul va procesa
cererile in aceeasi ordine (singura prioritate este cea de timp).
Dupa rularea programului, patronul va confirma intalnirile programate si le va 
reprograma pe cele care nu au putut fi asigurate.
Fiecare intalnire consta intr-un numar intreg de intervale de 10 minute, care
incep pentru fiecare ora h la h,h+10',h+20',h+30',h+40' si h+50'. Orice 
intalnire care nu incepe si/sau nu se termina in unul din aceste puncte fi 
extinsa la un interval de acest tip. De exemplu, o cerere de intalnire in 
intervalul [10.15,10.30] va fi extinsa automat la [10.10,10.30].
	De asemenea, dupa fiecare intalnire programata este necesara o pauza 
de 10 minute; deci nu vor fi programate doua intalniri in succesiune imediata.
Aceste pauze urmeaza dupa fiecare intalnire, cu exceptia celor care se termina
la 12.30 sau la 17.00. Nu sunt permise intalniri care sa modifice perioada 
pauzei de pranz.
	De asemenea, pentru ca sunt si alte activitati de rezolvat, programul
de intalniri nu va depasi 4 ore zilnic. Calculul acestei limite maxime se va 
face folosind cererile ajustate: nu se foloseste cererea originala de audienta 
si nu se include pauza de 10 minute care urmeaza unei cereri ajustate.
Deci, o cerere de intalnire [10.15,10.30] va contribui cu 20 minute la 
"portia" de 4 ore de intalniri din ziua respectiva.
	In final, utilizatorul acestui program solicita ca, daca o intalnire 
nu poate fi programata la ora solicitata, sa se incerce reasezarea ei la 
aceeasi ora in fiecare din zilele care urmeaza, programand-o in prima zi 
cand este posibil (dar nu la alta ora sau intr-o zi anterioara celei din 
solicitare). De exemplu, daca o intalnire nu poate fi programata marti la 
10.00, se va incerca reprogramarea ei miercuri la 10.00; daca nici atunci 
nu se poate, se incearca joi la 10.00, s.a.m.d
Daca programaul nu poate asigura o intalnire, numele persoanei va fi trecut pe
o lista a persoanelor a caror intalnire nu poate fi programata.
Intrare:
Fisierul de intrare consta din maxim 25 cereri de intalnire, scrise pe linii
separate sub forma:
nume zi timp_inceput durata
Aici campul <nume> ocupa primele 10 pozitii din cerere, <zi> - urmatoarele 3
caractere iar celelalte doua date sunt perechi de numere intregi. 
In <nume> sunt scrise carcatere alfanumerice, in <zi> este una din tripletele 
LUN,MAR,MIE,JOI,VIN.
Fiecare din cele doua perechi de numere intregi care urmeaza reprezinta ore
respectiv minute. De exemplu, cererea
IONESCU    MAR 09 15 1 30
arata ca IONESCU solicita o intrevedere de o ora si jumatate marti la ora 9.15.
Pentru ca agenda de programari este facuta pe blocuri de 10 minute, programul 
va incerca o programare a ei pentru marti in intervalul de timp [9.10,10.50] 
(adaugandu-se o ora si 40 minute la timpul total de audiente al zilei de marti).
Se considera toate datele de intrare corecte.
Iesire:
Iesirea va consta dintr-o programare a saptamanii urmata de o lista a numelor
acelor parsoane a caror cerere nu a putut fi programata in saptamana respectiva.
Zilele fara programari vor fi notate.
Exemplu:
Sa presupunem ca fisierul de intrare consta din urmatoarele cereri de intalniri:
IONESCU    MAR 09 15 1 30
POPESCU    LUN 09 00 0 30
MARINESCU  VIN 09 30 1 00
GEORGESCU  JOI 10 45 0 20
TUDOR      LUN 10 00 2 30
DUMITRESCU LUN 14 30 1 00
CODREANU   LUN 14 00 0 15
TENE       MIE 13 00 3 00
LIVEZEANU  JOI 09 45 1 05
SORESCU    JOI 11 10 0 30
	Iesirea va arata astfel:

	PLANIFICAREA INTALNIRILOR IN ACEASTA SAPTAMANA
LUNI:
POPESCU: 9.00 - 9.30
TUDOR: 10.00 - 12.30
DUMITRESCU: 14.30 - 15.30

MARTI:
IONESCU: 9.10 - 10.50
CODREANU: 14.00 - 14.20

MIERCURI:
NU SUNT FIXATE INTALNIRI

JOI:
GEORGESCU: 10.40 - 11.10

VINERI:
MARINESCU: 9.30 - 10.30
SORESCU: 11.10 - 11.40

	NU SE POT FIXA INTALNIRI PENTRU:
TENE
LIVEZEANU
==========================================

	7. Se considera n persoane care intra si ies dintr-o incapere pe rand, 
cate una, fara o ordine prestabilita. La intrarea in incapere se afla 
doua registre: un registru de intrare - in care fiecare persoana care 
intra isi scrie numele si numarul de persoane aflate in incapere la 
sosirea sa - si un registru de iesire - in care fiecare persoana care 
iese isi scrie numele si numarul de persoane ramase in incapere dupa 
plecarea sa. Printre aceste n persoane poate exista un singur mincinos 
care o singura data nu a completat corect unul din registre (numele 
este sigur corect); sa se afiseze numele mincinosului daca exista.
  Fisierul de intrare ziua8_2.inp poate contine mai multe seturi de 
date de intrare delimitate de cate un rand liber. Un set de date de 
intrare contine: pe o linie numerele n, ni si nf care reprezinta 
numarul total de persoane, cate sunt initial in incapere respectiv 
cate au ramas in final in incapere pe urmatoarele n linii numele 
acestora, apoi pe mai multe linii continutul registrului de intrare, 
un rand liber urmat de mai multe linii ce contin registrul de iesire.
  Fisierul de iesire ziua8_2.out contine cate un rand pentru fiecare 
set de date de intrare, randul respectiv contine unul din mesajele:

'Nu exista nici un mincinos'  daca toate cele n persoane au completat 
                              corect registrele
'Persoana x a completat incorect linia <<numarul liniei incorecte>> 
din registrul de intrare|iesire'  daca s-a determinat persoana care 
                                  minte
'Nu poate fi determinat mincinosul' 
	
Exemplu:
pentru setul de date intrare:
10 5 7
a
b
c
d
e
f
g
h
i
j
5 a
6 b
5 g
6 h
6 i
7 c

6 d
5 e
12 g
7 b
iesirea este:
Persoana g a completat incorect linia 2 din registrul de iesire.
===================================

	8. La realizarea unui circuit electric este nevoie uneori de o anumita rezistanta.
Dar nu intotdeauna avem la dispozitie rezistoarele corespunzatoare. De 
aceea recurgem la legarea in serie si in paralel.
 Se cunoaste ca la legarea in serie a N rezistoare, rezistenta 
echivalenta este suma rezistentelor din circuit. La legarea in paralel, 
inversul rezistentei echivalente este suma inverselor rezistentelor din 
circuit. Deci:

  Res= R1 + R2 + ... + Rn

   1    1    1           1
  ___ = -  + -  + ... +  -
  Rep   R1   R2          Rn

 Problema:
   Avand la dispozitie un numar nelimitat de rezistoare de valoare R data,
se pune problema de a se forma o rezistenta echivalenta R1, cu o 
aproximare EPS data.
 Intrarea:
   In fisierul rezist.inp se afla un singur set de date. Pe prima linie 
valoarea rezistentei R, pe linia a doua valoarea R1, iar pe urmatoarea 
precizia eps. Toate cele trei numere sunt reale.
  NU SE face validarea datelor de intrare.
 Iesirea:
   Pe ecran se va afisa numarul minim de rezistoare prin care s-a ajuns la 
valoarea R1, valoarea reala obtinuta precum si precizia.

Observatie (pentru rezolvare ?):
  O varianta Greedy, euristica: prin legarea in serie se ajunge la 
cel mai mare multiplu de R mai mic ca R1.

 Deci [R1/R] rezistente in serie. Apoi rezistenta de R1-[R1/R] se face 
prin punerea in paralel, deoarece grupand n rezistente in paralel se 
obtine rez. R/n. Deci la cele in serie legam in paralel atatea rez. incat

 R/n ~= R1-[R1/R]
------------------------------------------------------------

	9. Spitalul General Municipal incearca sa-si ordoneze activitatea sa 
tinand comt de economia de piata si de necesitatile populatiei. Pentru a 
asigura o planificare cat mai buna a utilizarii serviciilor oferite de spital, 
trebuie sa dezvoltati un program de simulare care sa asigure o repartizare 
optima a salilor de operatie, a reanimarilor si a ordinii operatiilor.
	Programul va trebui sa monitorizeze folosirea salilor de operatie si a 
paturilor din reanimari pe parcursul unei zile. Spitalul dispune de mai multe 
sali de operatie si de paturi in reanimari. Fiecare pacient care trebuie 
operat este asignat unei sali de operatie libere; la iesirea din operatie, 
pacientului trebuie sa i se asigure un pat intr-o camera la reanimare. Timpul 
necesar transportarii unui pacient din sala de operatie in reanimare este 
fixat si independent de pacient. Similar, timpul necesar pregatirii salii de 
operatie pentru urmatorul pacient precum si timpul necesar pregatirii unui 
pat insala de reanimare sunt fixate.
	Oficial, toti pacientii sunt programati pentru operatie in acelasi 
timp, dar ordinea reala in care ei merg in sala de operatie depinde de 
prioritatea data de medici. Un pacient care intra in operatie merge in sala 
libera cu cel mai mic numar. De exemplu, daca salile 2 si 4 devin libere 
simultan, pacientul aflat in capul listei de prioritati merge in sala 2 
simultan cu urmatorul care merge in sala 4.
	Dupa operatie, un pacient este dus in sala de reanimare si asezat in 
patul cu cel mai mic numar. Daca doi pacienti ies din operatie in acelasi timp,
primul va fi pacientul cu cel mai mic numar (daca in plus cei doi pacienti 
intra in operatie in acelasi timp, primul de pe lista de prioritati va fi 
instalat in pat).

Intrare si iesire:
	Fisierul de intrare contin date pentru unsingur test. Toate datele 
numerice sunt numere intregi; intregii consecutivi de pe aceeasi linie sunt 
separati printr-un spatiu. Prima linie a fisierului este multimea parametrilor 
asigurati de spital.
Acesti parametrii sunt (in ordine):
   - Numarul salilor de operare (maximum 10);
   - Numarul paturilor din sala de reanimare (maximum 30);
   - Ora de incepere a primei operatii din zi (dintr-o zi de 24 ore);
   - Minutele in care se transporta un pacient din sala de oepratie la 
reanimare;
   - Minutele de preparare a salii de operatie pentru urmatorul pacient;
   - Minutele de pregatire a unui pat la reanimare pentru urmatorul pacient;
   - Numarul de operatii pe zi (maximum 100).
Aceasta configuratie initiala de date va fi urmata de perechi de linii cu 
date ale pacientilor, astfel:
Linia 1: Numele (de botez) al pacientului (maxiumum 8 caractere);
Linia 2: Minutele necesare pentru operatie   Minutele necesare pentru reanimare;
	Inregistrarile pacientilor din fisierul de intrare sunt ordonate 
conform prioritatii de operare, care va determina ordinea de programare pentru 
operatie. Numarul de paturi de la renimare va fi suficient pentru a primi 
pacientii care ies din operatie (pacientii nu asteapta pentru a intra la 
reanimare). Timpul final calculat nu va depasi ora 24:00.
	Iesirea corecta va arata ce sala de operatii si ce pat din sala de 
reanimare va fi folosit de fiecare pacient, intervalul de timp in care 
pacientul foloseste ambele servicii, precum si un sumar al utilizarii 
serviciilor spitalului pentru acea zi. Fisierul de iesire consta dintr-un set 
de doua tabele descriind rezultatele executiei unei astfel de simulari. 
Prima tabela este sub forma unei coloane si va arata numarul fiecarui pacient 
(in ordinea prioritatii, deci a listei de intrare), numele pacientului, 
numarul salii de operare, momentele de incepere si incheiere a operatiei, 
numarul patului de la reanimare, momentele de ocupare si de eliberare a patului.
	Al doilea tabel, tot sub forma de coloana, va sumariza utilizarea 
salilor de operatii si a paturilor din reanimare. Acest sumar va indica tipul 
serviciului (sala sau pat), numarul de ordine (al salii sau patului), numarul 
de minute de folosinta si procentajul de timp de utilizare (raportul dintre 
timpul scurs de la inceperea primei operatii din zi pana la parasirea ultimului 
pat din reanimare, si timpul unei zile). Un exemplu de intrare si de iesire 
corect este dat in exemplul de mai jos:
Intrare:
5 12 07 5 15 10 16
Jones
28 140
Smith
120 200
Thompson
23 75
Albright
19 82
Poucher
133 209
Comer
74 101
Perry
93 188
Page
111 223
Roggio
69 122
Brigham
42 79
Nute
22 71
Young
38 140
Bush
26 121
Cates
120 248
Johnson
86 181
White
92 140
	Iesire:
 Pacient             Sala de Operare            Camera de Reanimare
#   Nume        Camera #    Inceput Sfarsit   Pat #   Inceput   Sfarsit
1  Jones           1         7:00     7:28      3       7:33      9:53
2  Smith           2         7:00     9:00      1       9:05     12:25
3  Thompson        3         7:00     7:23      2       7:28      8:43
4  Albright        4         7:00     7:19      1       7:24      8:46
5  Poucher         5         7:00     9:13      5       9:18     12:47
6  Comer           4         7:34     8:48      4       8:53     10:34
7  Perry           3         7:38     9:11      2       9:16     12:24
8  Page            1         7:43     9:34      6       9:39     13:22
9  Roggio          4         9:03    10:12      9      10:17     12:19
10  Brigham        2         9:15     9:57      8      10:02     11:21
11  Nute           3         9:26     9:48      7       9:53     11:04
12  Young          5         9:28    10:06      3      10:11     12:31
13  Bush           1         9:49    10:15      10     10:20     12:21
14  Cates          3        10:03    12:03      8      12:08     16:16
15  Johnson        2        10:12    11:38      4      11:43     14:44
16  White          5        10:21    11:53      7      11:58     14:18

  Serviciu           Utilizare
 Tip      #      Minute    % Folosire
Camera    1       165        29.68
Camera    2       248        44.60
Camera    3       258        46.40
Camera    4       162        29.14
Camera    5       263        47.30
Pat       1       282        50.72
Pat       2       263        47.30
Pat       3       280        50.36
Pat       4       282        50.72
Pat       5       209        37.59
Pat       6       223        40.11
Pat       7       211        37.95
Pat       8       327        58.81
Pat       9       122        21.94
Pat      10       121        21.76
Pat      11         0         0.00
Pat      12         0         0.00
===================================================
