Cerința
La un concurs de programare s-au înscris n
elevi. Concursul se desfăşoară pe două secţiuni, secţiunea 1
pentru începători şi secţiunea 2
avansaţi. Proba de concurs se desfăşoară pe parcursul a 3
ore şi elevii au de rezolvat 2
probleme.
Cerința
La un concurs de programare s-au înscris n
elevi. Concursul se desfăşoară pe două secţiuni, secţiunea 1
pentru începători şi secţiunea 2
avansaţi. Proba de concurs se desfăşoară pe parcursul a 3
ore şi elevii au de rezolvat 2
probleme.
Fiecare problemă poate avea punctajul minim de 0
puncte şi punctajul maxim de 100
de puncte. Punctajul final al concurentului este format din suma punctajelor celor două probleme. Să se scrie un program care citeşte numărul de elevi înscrişi şi apoi date despre fiecare elev înscris (secţiunea la care s-a înscris, punctajul obţinut pentru prima problema şi punctajul obţinut pentru a două problemă) și rezolvă următoarele cerinţe:
1. Afișează mesajul DA
dacă toţi cei N
elevi înscrişi au reuşit să obţină un punctaj nenul la ambele probleme propuse, respectiv NU
” în caz contrar.
2. Afişează pentru fiecare secţiune numărul de elevi înscrişi. Afişarea se va face în ordinea crescătoare a numărului secţiunii, prin perechi de numere de forma nr_secţiune nr_elevi
.
3. Afişaţi pentru fiecare secţiune punctajul maxim obţinut şi numărul de elevi care au obţinut acest punctaj. Afişarea se va face în ordinea crescătoare a numărului secţiunii, prin triplete de numere de forma nr_secţiune punctaj_maxim nr_elevi
. Ştiind ca premiile se acordă doar celor care au luat punctaj maxim, afişaţi şi numărul de premii care vor fi acordate.
Date de intrare
Fişierul de intrare concurs2.in
conţine pe prima linie un număr natural C
. Pentru toate testele de intrare, numărul C
are una din valorile 1
, 2
sau 3
. Pe linia a doua a fișierului se găseşte numărul natural N
– numărul de elevi înscrişi iar pe următoarele N
linii, separate prin spaţiu,trei numere S P1 P2
cu semnificaţia: S
secţiunea la care participă elevul, P1
punctajul obţinut la prima problemă şi P2
punctajul obţinut la a doua problemă.
Date de ieșire
Dacă C=1
, se va rezolva numai punctul 1). În acest caz, în fişierul de ieşire concurs2.out
se va scrie un singur mesaj DA
sau NU
.
Dacă C=2
, se va rezolva numai punctul 2). În acest caz, în fişierul de ieşire
concurs2.out
se vor scrie 2
linii, pe fiecare linie o pereche de numere, separate prin spaţiu reprezentând valorile cerinţei 2.
Dacă C=3
, se va rezolva numai punctul 3). În acest caz, în fişierul de ieşire
concurs2.out
se vor scrie 3
linii, pe primele două linii câte un triplet de numere separate prin spaţiu reprezentând valorile cerinţei 3 iar pe ultima linie numărul de premii.
Restricții și precizări
1 <= C <= 3
,1 <= S <= 2
0 < n <= 300
0 <= P1,P2 <= 100
Exemplul 1:
concurs2.in
1 7 1 100 100 2 100 100 1 50 0 1 100 100 2 0 40 1 100 100 2 30 70
concurs2.out
NU
Explicație
Există elevi care au punctajul 0
la probleme.
Exemplul 2:
concurs2.in
2 7 1 100 100 2 100 100 1 50 0 1 100 100 2 0 40 1 100 100 2 30 70
concurs2.out
1 4 2 3
Explicație
La secțiunea 1 sunt 4 înscriși iar la secțiunea 2 sunt 3 înscriși.
Exemplul 3:
concurs2.in
3 7 1 100 100 2 100 100 1 50 0 1 100 100 2 0 40 1 100 100 2 30 70
concurs2.out
1 200 3 2 200 1 4
Explicație
La secţiunea 1
punctajul maxim (200
) a fost obţinut de 3
elevi. La secţiunea 2
punctajul maxim (200
) a fost obţinut de 1
elev. Număr de premii 4
.
#include <bits/stdc++.h> using namespace std; ifstream cin("concurs2.in"); ofstream cout("concurs2.out"); int main() { int c, n; cin >> c >> n; if(c==1) { int a , b , c; int cnt=0; for(int i = 0 ; i < n ; ++i) { cin >> a >> b >> c; if(b > 0 && c > 0) cnt++; } if(cnt==n) cout << "DA"; else cout << "NU"; } if(c==2) { int a , b , c; int cnt1=0 , cnt2=0; for(int i = 0 ; i < n ; ++i) { cin >> a >> b >> c; if(a==1) cnt1++; if(a==2) cnt2++; } cout << 1 << ' ' << cnt1; cout << endl; cout << 2 << ' ' << cnt2; } if(c==3) { int a[500] , b[500] , c[500]; int cnt1=0 , cnt2=0; int max1=0 , max2=0; for(int i = 0 ; i < n ; ++i) { cin >> a[i] >> b[i] >> c[i]; if(a[i]==1) { if(b[i]+c[i]>max1) max1=b[i]+c[i]; } if(a[i]==2) { if(b[i]+c[i]>max2) max2=b[i]+c[i]; } } for(int i = 0 ; i < n ; ++i) { if(a[i]==1 && b[i]+c[i]==max1) cnt1++; if(a[i]==2 && b[i]+c[i]==max2) cnt2++; } cout << 1 << ' ' << max1 << ' ' << cnt1 << endl; cout << 2 << ' ' << max2 << ' ' << cnt2 << endl; cout << cnt1+cnt2; } return 0; }