Competiție

  • Introducere

 Mult aşteptata oră de Educație Fizică a sosit iar Mihai, alături de sora lui Ilinca pregătesc pentru colegii de clasă un concurs surpriză cu diferite probe: sărituri în lungime, aruncări la coş, gimnastică, probă de viteză, etc. Fiecare probă este notată, conform unui juriu, cu valori între 1 şi 10 urmând ca la finalul probelor fiecare coleg să aibă câte o notă pentru fiecare dintre acestea. Pentru un clasament final cât mai obiectiv şi fără greşeli, cei doi frați au nevoie de ajutorul vostru pentru întocmirea automată a clasamentului final.

  • Cerinţa problemei

Se dă un număr n de elevi şi un număr d de probe urmat de n+1 linii a câte d valori, reprezentând: numărul de puncte a fiecarei probe sportive (o linie cu d valori întregi) respectiv notele elevilor la probele competiției (n linii a câte d valori reale).

Pe baza lor se alcătuieşte clasamentul competiției, elevii fiind ordonați descrescător în funcție de punctajul obținut (elevii cu punctaje egale se situează pe aceeasi poziție şi sunt ordonați in functie de indicii acestora).

 Punctajul unui elev se calculează astfel:

p(elev) = p_{1}(elev) + p_{2}(elev)

Unde:

*p_{1}(elev): media notelor obținute la cele d probe, calculată astfel:

    \[p_{1}(elev) = \frac{\sum_{k=1}^d w_{k}*nota_{k}(elev)}{10 * \sum_{k=1}^d w_{k}}\]

*

    \[p_{2}(elev)\]

: poziția medie în clasament, calculată astfel:

    \[p_{2}(elev) = \frac{d}{\sum_{k=1}^d poz_{probak}(elev)}\]

Deoarece elevii privesc competiția ca pe o oportunitate de a-şi imbunătăți performanțele, Mihai doreşte să informeze elevii şi asupra efortului minim necesar pentru a fi câştigat competiția. Astfel se doreşte calcularea numărului minim de probe la care elevii ar fi trebuit să obțină nota 10 (în loc de nota curentă) pentru a obține locul I.

  • Structura datelor de intrare şi de ieșire

Datele de intrare se citesc de la tastatură. Pe prima linie se află două numere întregi, pozitive:

    \[n\]

şi

    \[d\]

cu semnificația precizată mai sus urmate de o linie cu valori întregi reprezentând ponderile probelor şi

    \[n\]

linii a câte

    \[d\]

valori reale reprezentând notele obținute de elevi.

Programul va afişa două blocuri diferite, separate printr-o linie nouă, reprezentând clasamentul final respectiv perfecționarea necesară fiecărui elev.

– Blocul clasament va conține pe prima linie textul “Clasament:” urmat de

    \[N\]

linii de forma:

    \[pozitie\]

: elev

    \[elevID\]

” ordonate crescător după

    \[pozitie\]

unde

    \[pozitie\]

– poziția în clasament iar

    \[elevID\]

– numărul elevului, dat de ordinea notelor elevilor în datele de intrare.

– Blocul perfecționare conține pe prima linie textul “Perfectionare:” urmat de

    \[N\]

linii de forma:

“elev

    \[elevID\]

:

    \[numarMaterii\]

” unde

    \[numarMaterii\]

reprezinta numărul minim de materii la care elevul trebuia să obțină notă maximă pentru a ocupa prima poziție.

  •  Restricții şi precizări

*

    \[1\]

 ≤

    \[n\]

 ≤

    \[50\]

*

    \[1\]

    \[d\]

    \[50\]

* limită de timp:  programul trebuie să ruleze in mai puțin de

    \[30 secunde/ test\]

* Când lucrăm cu valori de tip real (și nu întreg) nu vom compara egalitatea a două numere sub forma

    \[real_a == real_b\]

ci vom considera că cele două numere pot să difere printr-o eroare (notată

    \[EPS\]

) pentru a fi considerate egale. Astfel, în loc să considerăm că două numere sunt egale atunci când

    \[real_a == real_b\]

vom considera cele două numere egale atunci când diferența dintre ele este mai mică decât o eroare epsilon :

    \[fabs(real_a - real_b) < EPS\]

. În această problemă veți considera

    \[EPS = 0.000001\]

.

*Pentru a avea o acuratețe cât mai bună a calculelor este obligatorie folosirea tipului

    \[double\]

în loc de tipul

    \[float\]

. De asemenea, nu faceți truncheri sau aproximări inutile ale valorilor de-a lungul calculelor (exemplu: cast la

    \[int\]

şi apoi din nou la

    \[double\]

).

  •  Exemplu

  • *Date de intrare
5 3
4 2 2
9.70 9.80 8.60
7.95 7.30 7.15
9.15 8.35 7.60
8.55 9.35 7.30
5.50 8.05 10.00
  • * Calcul medii elevi

    \[p(elev_{1}) = 0.945000 + 0.750000 = 1.695000\]

\\

    \[p(elev_{2}) = 0.758750 + 0.214286 = 0.973036\]

\\

    \[p(elev_{3}) = 0.856250 + 0.375000 = 1.231250\]

\\

    \[p(elev_{4}) = 0.843750 + 0.333333 = 1.177083\]

\\

    \[p(elev_{5}) = 0.726250 + 0.300000 = 1.026250\]

\\

  • *Date de ieşire 
Clasament:
1. elev1
2. elev3
3. elev4
4. elev5
5. elev2

Perfectionare:
elev1: 0
elev2: 3
elev3: 2
elev4: 2
elev5: 2

Autori:  Andrei Pârvu, Emil Racec

Temă 2013