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.
Răspunsuri la întrebare
Răspuns de
2
Răspuns:
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("serbare.in");
ofstream fout("serbare.out");
struct sistem{
int Grupa;
int Tipuri;
}g[101],inter;
int main()
{
int n,i,Grupa,Tipuri,aux[15]={0},p,j;
fin>>n>>p;
for(i=1;i<=n;i++)
{
fin>>Grupa>>Tipuri;
aux[Tipuri]+=Grupa;
}
for(i=1;i<=p;i++)
{
g[i].Tipuri=i;
g[i].Grupa=aux[i];
}
for(i=1;i<p;i++)
{
for(j=i+1;j<=p;j++)
if(g[i].Grupa<g[j].Grupa)
{
inter=g[i];
g[i]=g[j];
g[j]=inter;
}
}
for(i=1;i<=p;i++)
fout<<g[i].Tipuri<<" ";
}
Explicație:
Alte întrebări interesante