Rezolvare completă PbInfo #1460 serbare

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.

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema serbare:

#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;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #1460 serbare

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1460 serbare de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!