Problema 1  Premii 

    La un concurs de informatica doi concurenti au obtinut acelasi cel mai bun 
rezultat. Premiul oferit de sponsori este format din mai multe obiecte, avand 
valori nu neaparat distincte.
    Scrieti un program care imparte obiectele intre cei doi concurenti, astfel 
incat diferenta dintre valorile totale ale obiectelor primite de fiecare sa 
fie minima.

Date de intrare
    Datele de intrare se vor citi din fisierul de tip text PREMII.IN:
- pe prima linie a fisierului se afla un numar intreg n (1<n<=100) reprezentand 
numarul de obiecte care trebuie impartite;
- pe a doua linie sunt scrise valorile celor n obiecte; acestea sunt numere 
intregi, strict pozitive, mai mici decat 100, separate printr-un singur spatiu.

Date de iesire
    Fie S1 suma valorilor obiectelor primite de unul dintre concurenti si 
S2 suma valorilor obiectelor primite de celalalt. In fisierul PREMII.OUT se 
vor scrie numerele S1 si S2, separate printr-un singur spatiu. Cele doua 
numere se pot scrie in orice ordine.

Exemplu
PREMII.IN           PREMII.OUT
5               110 115
15
80
30
50
50

Timp maxim de executie/test: 1 secunda

Problema 2  Numere "superprime" 

    Numim numere superprime acele numere naturale prime ale caror prefixe sunt 
de asemenea prime. De exemplu, numarul 239 este superprim, deoarece numerele 2,  
23 si 239 toate sunt prime. Numarul 241 nu este superprim, deoarece 24 nu este 
prim.
    Scrieti un program care genereaza toate numerele superprime formate din n 
cifre. 

Date de intrare
    Din fisierul de tip text PRIME.IN se va citi numarul n (1<n<=9), 
reprezentand numarul cifrelor numerelor prime care trebuie generate. 

Date de iesire
    In fisierul PRIME.OUT se vor scrie numerele prime generate, precedate de 
prefixele lor prime. 
Pe fiecare linie a fisierului se va scrie un numar format din n cifre, precedat 
de prefixele lui. 
Doua numere se vor desparti printr-un singur spatiu. Fisierul va avea atatea 
linii cate numere superprime a gasit algoritmul.

Exemplu (datele de iesire sunt scrise pe doua coloane din motive de spatiu)
PRIME.IN            PRIME.OUT
3               2 23 233                3 37 379
                2 23 239                5 59 593
                2 29 293                5 59 599
                3 31 311                7 71 719
                3 31 313                7 73 733
                3 31 317                7 73 739
                3 37 373                7 79 797
Timp maxim de executie/test: 1 secunda

Problema 3  Panou 

    Se considera un panou electric pe care sunt dispuse m*n becuri, conform 
unui caroiaj. Aceste becuri pot fi aprinse sau stinse. Schimbarea starilor se 
poate realiza de la un pupitru de comanda care are la dispozitie un mecanism 
de dimensiune p*q care asezat deasupra panoului il acopera pe acesta partial 
si schimba starea becurilor pe care le acopera. Scrieti un program care 
stabileste daca se pot aprinde, sau nu, toate becurile de panou, folosind 
acest dispozitiv. 

Date de intrare
    Datele de intrare se vor citi din fisierul de tip text PANOU.IN: 
- pe prima linie a fisierului se afla doua numere naturale n si m (1<n,m<=100) 
reprezentand numarul de linii, respectiv de coloane ale panoului electric;
- pe a doua linie se afla doua numere naturale p si q (1<p,q<=100, p<n,q<m) 
reprezentand numarul de linii, respectiv de coloane ale dispozitivului;
- pe fiecare din urmatoarele n linii sunt scrise starile celor m becuri de pe 
acea linie; fiecarui bec aprins ii corespunde un caracter +, iar celor stinse 
cate un caracter - (caracterele + si - nu sunt separate prin nici un spatiu).

Date de iesire
    Daca toate becurile se pot aprinde, pe prima linie a fisierului de iesire 
PANOU.OUT se va scrie cuvantul DA, altfel se va scrie NU. In caz afirmativ, pe 
urmatoarele linii se vor descrie pozitiile dispozitivului care vor avea ca 
efect stingerea tuturor becurilor. O pozitie se precizeaza prin indicele de 
linie si cel de coloana din matricea corespunzatoare panoului electric, unde 
se pozitioneaza coltul stanga sus al dispozitivului. 

Exemplu

PANOU.IN                PANOU.OUT
5 6                 DA          
2 2                 2 3
++++++                  3 3
++--++
++++++
++--++
++++++


Timp maxim de executie/test: 1 secunda

Problema 4  Sume 

    Se da un sir strict crescator de n (1<n<=100.000) numere naturale. Sa se 
decida daca orice numar natural x din {1,2,...,m} se poate scrie ca suma de 
termeni distincti din sirul dat. Numarul m este cel mult egal cu 2.000.000.000. 
Daca descompunerea solicitata nu este posibila, sa se determine cel mai mic 
numar care nu poate fi scris ca suma de termeni distincti din sirul dat. 

Date de intrare
    Datele de intrare se vor citi din fisierul de tip text SUME.IN. Pe prima 
linie a fisierului sunt scrise numerele n si m separate printr-un singur spatiu. 
Pe urmatoarele n linii sunt scrise elementele sirului strict crescator. 

Date de iesire
    In cazul in care descompunerea este posibila, in fisierul SUME.OUT se va 
scrie DA. In caz contrar, prima linie a fisierului va contine cuvantul NU, iar 
pe urmatoarea linie se va scrie cel mai mic numar, care nu poate fi scris ca 
suma de termeni distincti din sirul dat.
Exemple

SUME.IN             SUME.OUT
4 11                DA
1
2
4
5

SUME.IN             SUME.OUT
4 11                NU
1               8
2
4
10

Timp maxim de executie/test: 1 secunda


Problema 5 Factorial

    Din fisierul FACT.IN se citeste un numar natural N (100<=N<=10^1000) despre 
care se stie ca reprezinta o valoare k! (k factorial). Scrieti un program care 
determina si afiseaza in fisierul FACT.OUT numarul k.

Exemple

FACT.IN         FACT.OUT
40320           8

FACT.IN         FACT.OUT
1307674368000       15


Timp maxim de executie/test: 1 secunda

Problema 6  Dominouri 

    Se dau n piese de domino (o piesa de domino este o placuta dreptunghiulara 
pe care sunt inscrise doua cifre din multimea {0,1,...,6}). Cu aceste piese de 
domino se pot forma lanturi (formatiuni liniare) in care oricare doua dominouri 
consecutive sunt alipite pe zona unde cifrele lor sunt identice. 
    Scrieti un program care din cele n dominouri date formeaza doua lanturi 
astfel incat diferenta dintre suma tuturor punctelor inscrise pe dominourile 
din prima formatie si suma tuturor punctelor inscrise pe dominourile din cea 
de a doua formatie sa fie minima. In plus, cele doua lanturi formate, trebuie 
sa fie subsiruri ale sirului initial de dominouri.

Date de intrare
    Datele de intrare se vor citi din fisierul de tip text DOMINO.IN. 
- Pe prima linie a fisierului se afla un numar intreg n (1<n<=20) reprezentand 
numarul de dominouri din care se vor forma cele doua lanturi;
- Pe urmatoarele n linii se afla valorile care sunt scrise pe cele n dominouri; 
acestea sunt perechi de numere naturale apartinand multimii {0,1,...,6}. Intre 
cele doua numere exista un singur spatiu.
Restrictii: 
    1. Trebuie utilizate toate piesele de domino; datele de intrare permit 
formarea a doua lanturi.
    2. Cele doua lanturi formate, trebuie sa fie subsiruri ale sirului initial 
de dominouri (nici un domino nu va depasi in propria formatie un alt domino 
care in sirul din fisierul de intrare a fost precizat undeva, in urma acestuia). 

Date de iesire
    - pe prima linie numarul N1 al dominourilor din primul lant
    - pe urmatoarele N1 linii dominourile din primul lant
    - pe urmatoarea linie numarul N2 al dominourilor din al doilea lant
    - pe urmatoarele N2 linii dominourile din al doilea lant

Exemplu

DOMINO.IN       DOMINO.OUT
5           1
1 0         0 1
1 5         1 5
2 3         5 1
2 5         
5 1         3 2
            2 5


Timp maxim de executie/test: 1 secunda