/* Sprendė Eimutis Karčiauskas Kauno 22 vm 1966m. laidos abiturientas
https://www.nsa.smm.lt/wp-content/uploads/2021/03/6287_IT-VBE-1_2016-GALUTINIS.pdf
<<< Pradiniai duomenys - perkėlimui į failą >>>
10
prisitraukimai 10
atsispaudimai 15
atsilenkimai 12
prisitraukimai 4
atsilenkimai 15
atsilenkimai 10
prisitraukimai 12
atsilenkimai 10
atsispaudimai 2
atsispaudimai 2
01234567890123456789 - skirta simboliams skaičiuoti
*/
#include <iostream>
#include <algorithm> // reikalinga rikiavimui
using namespace std;
struct Pratimas {
string vardas; // pratimo vardas
int kiekis; // susumuotas kiekis
};
// visos reikšmės pagal nutylėjimą nulinės
Pratimas pratimai[20]; // skirtingų pratimų sąrašas
int pr_sk; // skirtingų pratimų skaičius
//------------------------------------------------
// garantuota paieška su apsaugine reikšme pabaigoje
int rastiPratimoInd(string paieska) {
pratimai[pr_sk].vardas = paieska; // visada rasime :)
int i = 0;
while (pratimai[i].vardas != paieska) i++;
if(i == pr_sk) pr_sk++; // jei nebuvo - padidiname
return i;
}
//------------------------------------------------
string getFix(int n){ // skaitoma fiksuoto ilgio eilutė
char buf[n+1]; // buferis vardo nuskaitymui
cin.get(buf, n+1); // fiksuoto ilgio teksto nuskaitymas
return buf; // gražinant buf pakeičiama į string
}
//------------------------------------------------
void skaityti(){ // skaitome duomenis iš srauto cin
int dsk; // duomenų eilučių skaičius
cin >> dsk >> ws; // jį įvedame
for(int i=0; i<dsk; i++){
string vardas = getFix(20);
int kartai; // vieno pratimo kartai
cin >> kartai >> ws;
int pi = rastiPratimoInd(vardas);
pratimai[pi].kiekis += kartai;
}
}
//------------------------------------------------
void spausdinti(){ // spausdina į ekraną arba į failą
for (int i = 0; i < pr_sk; i++){
Pratimas p = pratimai[i];
cout << p.vardas << " " << p.kiekis << endl;
}
}
//------------------------------------------------
// rikiavimo kriterijaus funkcija
bool arTvarka(Pratimas& a, Pratimas& b){
return a.kiekis > b.kiekis ||
a.kiekis == b.kiekis && a.vardas == b.vardas;
}
//------------------------------------------------
int main(){
freopen ("U2.txt","r",stdin);
freopen ("U2rez.txt","w",stdout);
skaityti();
sort(pratimai, pratimai+pr_sk, arTvarka);
spausdinti();
return 0;
}
10
prisitraukimai 10
atsispaudimai 15
atsilenkimai 12
prisitraukimai 4
atsilenkimai 15
atsilenkimai 10
prisitraukimai 12
atsilenkimai 10
atsispaudimai 2
atsispaudimai 2
01234567890123456789 - skirta simboliams skaičiuoti
atsilenkimai 47
prisitraukimai 26
atsispaudimai 19