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
.
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 Concurs2:
#include <fstream>
using namespace std;
ifstream fin("concurs2.in");
ofstream fout("concurs2.out");
int main()
{
int c, n, s1[302], s2[302], i, p1, p2, kal = 0, p3, a1 = 0, a2 = 0, maxi1 = -1, maxi2 = -1, kal1 = 0, kal2 = 0, ind1 = 0, ind2 = 0;
fin >> c;
fin >> n;
if (c == 1)
{
for (i = 1; i <= n; i++)
{
fin >> p3 >> p1 >> p2;
if (p1 == 0)
{
kal++;
}
if (kal) break;
}
if (kal) fout << "NU";
else fout << "DA";
}
if (c == 2)
{
for (i = 1; i <= n; i++)
{
fin >> p3 >> p1 >> p2;
if (p3 == 1) a1++;
else a2++;
}
fout << 1 << " " << a1 << '\n' << 2 << " " << a2;
}
if (c == 3)
{
for (i = 1; i <= n; i++)
{
fin >> p3 >> p1 >> p2;
if (p3 == 1)
{
s1[++ind1] = p1 + p2;
if (s1[ind1] > maxi1) maxi1 = s1[ind1];
}
if (p3 == 2)
{
s2[++ind2] = p1 + p2;
if (s2[ind2] > maxi2) maxi2 = s2[ind2];
}
}
for (i = 1; i <= ind1; i++)
{
if (s1[i] == maxi1) kal1++;
}
for (i = 1; i <= ind2; i++)
{
if (s2[i] == maxi2) kal2++;
}
fout << 1 << " " << maxi1 << " " << kal1 << '\n' << 2 << " " << maxi2 << " " << kal2 << '\n' << kal1 + kal2;
}
}
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 .
Rezolvarea problemei #1753 Concurs2
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1753 Concurs2 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!