Rezolvare completă PbInfo #1753 Concurs2

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 Adresa de email.

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!