# PBinfo #1460 – serbare – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: andrei

## Enunț

Cerința
La o serbare sunt n grupe de copii care poartă p tipuri de uniforme. Scrieţi un program care să afişeze pe ecran tipurile de uniforme în ordinea descrescătoare a numărului total de copii ce poartă fiecare tip de uniformă. Afişarea se va face pe o singură linie, valoriile fiind separate printr-un spaţiu.

Date de intrare
Fișierul de intrare serbare.in conține, pe prima linie, numerele n şi p, separate printr-un spaţiu, iar pe următoarele n linii câte două valori separate printr-un spaţiu ce reprezintă numărul de copii dintr-o grupă şi respectiv tipul de uniformă pe care aceştia îl poartă.

Date de ieșire
Fișierul de ieșire serbare.out va conţine tipurile de uniforme în ordinea descrescătoare a numărului total de copii ce poartă fiecare tip de uniformă. Numerele vor fi separate printr-un spaţiu.

Restricții și precizări

1 ≤ n ≤ 1000
1 ≤ p ≤ 11
Numărul de copii dintr-o grupă este cel mult 100
Fiecare mărime de uniformă din intervalul [1,p] este purtată de cel puţin un copil.

Exemplu:
serbare.in

5 3
20 2
20 3
30 2
20 1
10 1
serbare.out

2 1 3
Explicaţii:
Tipul 2 de uniformă este purtat de 50 de copii, tipul 1 de 30 de copii, iar tipul 3 de 20 de copii.

## Cod sursă C++

```cpp
#include <fstream>
struct _uniforma {
    int marime, numarCopii;
};
int main() {
    std::ifstream fin("serbare.in");
    std::ofstream fout("serbare.out");
    _uniforma uniforma[15], aux;
    int copii, uniforme, marimi[15] = {0};
    fin >> copii >> uniforme;
    for(int i = 1; i <= copii; i++) {
        int marime, nrCopii;
        fin >> nrCopii >> marime;
        marimi[marime] += nrCopii;
    }
    for(int i = 1; i <= uniforme; i++) {
        uniforma[i].marime = i;
        uniforma[i].numarCopii = marimi[i];
    }
    for(int i = 1; i < uniforme; i++)
        for(int j = i + 1; j <= uniforme; j++)
            if(uniforma[i].numarCopii < uniforma[j].numarCopii) {
                aux = uniforma[i];
                uniforma[i] = uniforma[j];
                uniforma[j] = aux;
            }
    for(int i = 1; i <= uniforme; i++)
        fout << uniforma[i].marime << ' ';
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/1460)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/1460/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-1460/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
