/* Sprendė Eimutis Karčiauskas 1966m. laidos abiturientas
2
Rima Liepa 1
Ungurys 456
Petras A. Petraitis 3
Lydeka 526
Veidrodinis karpis 250
Lydeka 125
5
Ungurys 15
Veidrodinis karpis 5
Kuoja 3
Karosas 5
Lydeka 15
--*/
#include <iostream>
using namespace std;
struct Duomuo{ // universali struktūra - tinka žvejui ir žuvims
string ident; // žveją ar žuvį identifikuojanti informacija
int num; // skaičius: kiekis, svoris ar taškai
};
// ***************************************************
// bendri pradiniai duomenys ir rezultatai
const int maxK = 30;
Duomuo dalyviai[maxK], // pradžioje su žuvų kiekiu, paskui- taškai
pagautosZuvys[maxK*maxK], //visų dalyvių pagautos žuvys
zuvys[maxK], // pradinis žuvų taškų registras
zuvuSvoriai[maxK]; // rezultatas su atskirų rūšių svoriais
int dalN = 0, zuvN = 0;
// ******************************************************
// įveda vieną duomenį, esantį vienoje eilutėje: ident ir skaičių
void IvestiDuomeni(Duomuo& duom){
cin.ignore(80, '\n'); // pradedame skaityti nuo naujos eilutės
char idBuf[21]; // buferis ident nuskaitymui
cin.get(idBuf, 21); // fiksuoto teksto dydžio nuskaitymas
int skaicius;
cin >> skaicius;
duom.ident = idBuf;
duom.num = skaicius;
}
// ***************************************************
// surenka duomenis apie dalyvius-žvejus ir jų pagautas žuvis
void DalyviuDuomenys() {
int pagZuvN = 0; // visų žvejų pagautos žuvys viename masyve
cin >> dalN;
for(int idal=0; idal<dalN; idal++){
IvestiDuomeni(dalyviai[idal]);
for(int ipz=0; ipz<dalyviai[idal].num; ipz++)
IvestiDuomeni(pagautosZuvys[pagZuvN++]);
}
}
// ***************************************************
// surenka duomenis apie gaudomas žuvis ir paruošia žuvų svorių masyvą
void ZuvuDuomenys() {
cin >> zuvN;
for(int izuv=0; izuv<zuvN; izuv++){
IvestiDuomeni(zuvys[izuv]);
zuvuSvoriai[izuv].ident = zuvys[izuv].ident;
zuvuSvoriai[izuv].num = 0; // pradinis svoris = 0;
}
}
// ***************************************************
// pagal ident randa ir grąžina žuvies taškus + padidina žuvų svorį
int RastiZuvi(Duomuo zuvys[], Duomuo zuvuSvoriai[], Duomuo zuvis){
int ind = 0;
while(zuvys[ind].ident != zuvis.ident)
ind++;
zuvuSvoriai[ind].num += zuvis.num;
return zuvys[ind].num;
}
// ***************************************************
// suskaičiuojame dalyvių (žvejų) taškus pagal žuvų svorį ir rūšį
void Taskai(){
int ipz = 0;
for(int idal = 0; idal<dalN; idal++){
int sumTsk = 0;
for(int i = 0; i<dalyviai[idal].num; i++){
Duomuo zuvis = pagautosZuvys[ipz++];
sumTsk += zuvis.num < 200 ? 10 : 30;
sumTsk += RastiZuvi(zuvys, zuvuSvoriai, zuvis);
}
dalyviai[idal].num = sumTsk;
}
}
// ***************************************************
bool arTvarka(Duomuo a, Duomuo b){
return a.num < b.num ||
a.num == b.num && a.ident < b.ident;
}
void Rikiuoti(Duomuo duom[], int n){
for(int i = 0; i < n - 1; i++){
for(int j = i + 1; j < n; j++){
if(!arTvarka(duom[i], duom[j]))
swap(duom[i], duom[j]);
}
}
}
// ***************************************************
void Spausdinti(Duomuo duomenys[], int dalN, string pavadinimas){
cout << pavadinimas << endl;
for(int i=0; i<dalN; i++){
Duomuo d = duomenys[i];
cout << d.ident << " " << d.num << endl;
}
}
// ***************************************************
int main() {
freopen ("U2.txt","r",stdin);
//freopen ("U2rez.txt","w",stdout);
DalyviuDuomenys();
ZuvuDuomenys();
Taskai();
Rikiuoti(dalyviai, dalN);
Rikiuoti(zuvuSvoriai, zuvN);
Spausdinti(dalyviai, dalN, "DALYVIAI");
Spausdinti(zuvuSvoriai, zuvN, "LAIMIKIS");
}
2
Rima Liepa 1
Ungurys 456
Petras A. Petraitis 3
Lydeka 526
Veidrodinis karpis 250
Lydeka 125
5
Ungurys 15
Veidrodinis karpis 5
Kuoja 3
Karosas 5
Lydeka 15