/* Sprendė Eimutis Karčiauskas Kauno 22 vm 1966m. laidos abiturientas
https://www.nsa.smm.lt/wp-content/uploads/2022/06/IT_2022_pagr.pdf
<<< Pradiniai duomenys - perkėlimui į failą >>>
8
2 Atsilenkimai Rytas 10 Prisitraukimai Rytas 8
3 Atsispaudimai Diena 8 Tempimas Vakaras 8 Atsilenkimai Vakaras 9
1 Svarmenys Vakaras 11
3 Svarmenys Diena 10 Svarmenys Diena 12 Atsilenkimai Diena 15
2 Atsilenkimai Vakaras 22 Svarmenys Vakaras 10
3 Svarmenys Diena 15 Atsispaudimai Diena 15 Atsispaudimai Diena 5
2 Svarmenys Rytas 23 Svarmenys Vakaras 13
3 Atsispaudimai Rytas 10 Atsispaudimai Diena 12 Tempimas Vakaras 10
*/
#include <iostream>
#include <algorithm> // reikalinga rikiavimui
using namespace std;
struct Pratimas {
string vardas; // pratimo vardas
int sk_dd[3]; // skaitikliai trims dienos dalims
int min_sk; // minučių skaitiklis
bool d_poz[32]; // dienos požymiai - ar i dieną buvo pratimas
};
// visos reikšmės pagal nutylėjimą nulinės
Pratimas pratimai[20]; // skirtingų pratimų sąrašas
int pr_sk; // skirtingų pratimų skaičius
int d_sk; // dienų (duomenų eilučių) skaičius
//------------------------------------------------
const string d_dalys[3] = {"Rytas", "Diena", "Vakaras"};
int rastiInd(string vardas){ // keičiame vardą į indeksą
int i = 0;
while(d_dalys[i] != vardas) i++;
return i;
}
//------------------------------------------------
// Taikysime paiešką su apsaugine reikšme pabaigoje
// Atitinka užduoties nurodymą: parašykite funkciją, kuri
// sudarytų pratimų unikalių (nepasikartojančių) pavadinimų sąrašą.
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;
}
//------------------------------------------------
void skaityti(){ // skaitome duomenis iš srauto cin
int p_sk; // vienos dienos pratimų skaičius
cin >> d_sk; // įvedame dienų skaičių
for (int dnr=0; dnr < d_sk; dnr++){
cin >> p_sk; // įvedame pratimų skaičių
for(int j=0; j<p_sk; j++){
string vardas, dm; // dm - dienos metas
int msk; // msk - minučių skaičius
cin >> vardas >> dm >> msk;
int pi = rastiPratimoInd(vardas);
int di = rastiInd(dm);
pratimai[pi].sk_dd[di]++;
pratimai[pi].min_sk += msk;
pratimai[pi].d_poz[dnr] = true;
}
}
}
//------------------------------------------------
void spausdinti(){ // spausdina į ekraną arba į failą
for (int i = 0; i < pr_sk; i++){
Pratimas p = pratimai[i];
int kiek_dienu = 0; // skaičiuosime požymių sumą
for(int dnr=0; dnr<d_sk; dnr++)
kiek_dienu += p.d_poz[dnr];
cout << p.vardas << " "
<< kiek_dienu << " "
<< p.min_sk << endl;
for(int k=0; k<3; k++)
if(p.sk_dd[k] > 0)
cout << d_dalys[k] << "\t"
<< p.sk_dd[k] << endl;
}
}
//------------------------------------------------
// rikiavimo kriterijaus funkcija
bool arTvarka(Pratimas& a, Pratimas& b){
return 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;
}
8
2 Atsilenkimai Rytas 10 Prisitraukimai Rytas 8
3 Atsispaudimai Diena 8 Tempimas Vakaras 8 Atsilenkimai Vakaras 9
1 Svarmenys Vakaras 11
3 Svarmenys Diena 10 Svarmenys Diena 12 Atsilenkimai Diena 15
2 Atsilenkimai Vakaras 22 Svarmenys Vakaras 10
3 Svarmenys Diena 15 Atsispaudimai Diena 15 Atsispaudimai Diena 5
2 Svarmenys Rytas 23 Svarmenys Vakaras 13
3 Atsispaudimai Rytas 10 Atsispaudimai Diena 12 Tempimas Vakaras 10