/* Sprendė Eimutis Karčiauskas 1966m. laidos abiturientas
https://www.nsa.smm.lt/wp-content/uploads/2022/06/IT_2022_pagr.pdf
<<< Pradiniai duomenys - perkėlimui į failą >>>
6
10 10 20 15 15 20
2 2 5 3 3 5
Ignas 12 22 0 10 12 17
Skirmantas 5 12 0 40 12 30
Milda 10 10 20 22 31 23
Asta Ieva 5 0 17 10 23 23
Rima 8 0 14 23 12 23
*/
#include <iostream>
#include <algorithm> // reikalinga rikiavimui
using namespace std;
struct Dalyvis {
string vardas; // dalyvio vardas
int tsk; // dalyvio taškai
int teis_sk; // teisingai išspręstų skaitiklis
int min_sk; // minučių skaičius
};
// visos reikšmės pagal nutylėjimą nulinės
const int dalN = 5; // dalyvių skaičius
Dalyvis dalyviai[dalN]; // dalyvių sąrašas
int uzdN; // užduočių skaičius
int taskai[12]; // užduotims skiriami taškai
int laiko_lim[12]; // užduočių laiko limitai
//------------------------------------------------
/* pagal užduoties nurodymą: vieną funkciją, kuri apskaičiuoja
dalyvio surinktų taškų skaičių, teisingai išspręstų uždavinių skaičių
ir šiems uždaviniams spręsti sugaištą laiką minutėmis */
Dalyvis formuoti_dalyvi(){
Dalyvis d;
cin.ignore(80, '\n'); // pradedame skaityti nuo naujos eilutės
char idBuf[11]; // buferis vardo nuskaitymui
cin.get(idBuf, 11); // fiksuoto teksto dydžio nuskaitymas
d.vardas = idBuf;
d.tsk = 0; // dalyvio taškai
d.teis_sk = 0; // dalyvio teisingų skaičius
d.min_sk = 0; // dalyvio minutės
for (int i=0; i<uzdN; i++){
int dl; // dalyvio laikas i-jai užduočiai spręsti
cin >> dl;
if (dl > 0){ // jei dalyvio laikas > 0
d.teis_sk++;
d.min_sk += dl;
int ut = taskai[i]; // uždavinio taškai
d.tsk += dl <= laiko_lim[i]? ut: ut/2;
}
}
return d;
}
//------------------------------------------------
void skaityti(){ // skaitome duomenis iš srauto cin
cin >> uzdN; // įvedame užduočių skaičių
for(int i=0; i<uzdN; i++)
cin >> laiko_lim[i];
for(int i=0; i<uzdN; i++)
cin >> taskai[i];
for (int i=0; i < dalN; i++)
dalyviai[i] = formuoti_dalyvi();
}
//------------------------------------------------
void spausdinti(int max_tsk){ // į ekraną arba į failą
cout << max_tsk << endl;
for (auto d: dalyviai)
if(d.tsk == max_tsk)
cout << d.vardas << " "
<< d.teis_sk << " "
<< d.min_sk << endl;
}
//------------------------------------------------
int max_taskai(){
int max_tsk = 0;
for (auto d: dalyviai)
max_tsk = max(max_tsk, d.tsk);
return max_tsk;
}
//------------------------------------------------
// rikiavimo kriterijaus funkcija
bool arTvarka(Dalyvis& a, Dalyvis& b){
return a.teis_sk > b.teis_sk;
}
//------------------------------------------------
int main(){
freopen ("U1.txt","r",stdin);
freopen ("U1rez.txt","w",stdout);
skaityti();
sort(dalyviai, dalyviai+dalN, arTvarka);
spausdinti(max_taskai());
return 0;
}
6
10 10 20 15 15 20
2 2 5 3 3 5
Ignas 12 22 0 10 12 17
Skirmantas 5 12 0 40 12 30
Milda 10 10 20 22 31 23
Asta Ieva 5 0 17 10 23 23
Rima 8 0 14 23 12 23