#include <iostream>
#include <string>
using namespace std;
class EVENT {
private:
string date;
string name;
public:
EVENT(string da, string na) : date(da), name(na) { }
string GetDate() { return date; }
void Info()
{
cout << "date: " << date << endl;
cout << "name: " << name << endl;
}
};
class PROBLEM {
private:
string name;
int points;
public:
PROBLEM(string n="", int p=0) : name(n), points(p) { }
string GetName() { return name; }
int GetPoints() { return points; }
void Info() { cout << name << " " << points << endl; }
};
class PROBLEMS {
private:
int number; // actual number of problems
PROBLEM tasks[100]; // max number
public:
PROBLEMS(int n) : number(n) { }
void AddProblem(int i, PROBLEM& p) { tasks[i] = p; }
void Info() { for(int i=0;i<number;i++) tasks[i].Info(); }
void SortedInfo();
};
class EXAM : public EVENT, public PROBLEMS {
public:
EXAM(EVENT e, PROBLEMS p) : EVENT(e), PROBLEMS(p) {}
void Info()
{
EVENT(*this).Info();
PROBLEMS(*this).Info();
}
void SortedInfo();
};
void SortByDate(EXAM**, int);
int main()
{
string date, name;
int num;
int ps;
EXAM* list[100]; // max. number of exams
cin >> num;
for(int i=0; i<num; i++)
{
cin >> date >> name >> ps;
EXAM* exam = new EXAM(EVENT(date,name),PROBLEMS(ps));
list[i] = exam;
for(int j=0; j<ps; j++)
{
string name;
int pts;
cin >> name >> pts;
PROBLEM p(name,pts);
exam->AddProblem(j, p);
}
}
SortByDate(list,num);
for(int i=0; i<num; i++) { list[i]->SortedInfo(); if (i<num-1) cout << "---" << endl; }
return 0;
}
// begin: part 1, You are allowed to change the code ONLY between the brackets {} below in both methods
void SortByDate(EXAM** list, int n)
{
for(int i = 0; i < n - 1; i++)
{
for(int j = 0; j < n - i - 1; j++)
{
if(list[j]->GetDate() > list[j + 1]->GetDate())
swap(list[j], list[j + 1]);
}
}
}
void EXAM::SortedInfo()
{
PROBLEMS::SortedInfo();
Info();
}
void PROBLEMS::SortedInfo()
{
for(int i = 0; i < number - 1; i++)
{
for(int j = 0; j < number - i - 1; j++)
{
if(tasks[j].GetPoints() == tasks[j + 1].GetPoints())
{
if(tasks[j].GetName() > tasks[j + 1].GetName())
swap(tasks[j], tasks[j + 1]);
}
if(tasks[j].GetPoints() < tasks[j + 1].GetPoints())
swap(tasks[j], tasks[j + 1]);
}
}
}
// end: part 1
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIEVWRU5UIHsKcHJpdmF0ZToKCXN0cmluZyBkYXRlOwoJc3RyaW5nIG5hbWU7CnB1YmxpYzoKCUVWRU5UKHN0cmluZyBkYSwgc3RyaW5nIG5hKSA6IGRhdGUoZGEpLCBuYW1lKG5hKSB7IH0KCXN0cmluZyBHZXREYXRlKCkgeyByZXR1cm4gZGF0ZTsgfQoJdm9pZCBJbmZvKCkKCXsKCQljb3V0IDw8ICJkYXRlOiAiIDw8IGRhdGUgPDwgZW5kbDsKCQljb3V0IDw8ICJuYW1lOiAiIDw8IG5hbWUgPDwgZW5kbDsKCX0KfTsKCmNsYXNzIFBST0JMRU0gewpwcml2YXRlOgoJc3RyaW5nIG5hbWU7CglpbnQgcG9pbnRzOwpwdWJsaWM6CglQUk9CTEVNKHN0cmluZyBuPSIiLCBpbnQgcD0wKSA6IG5hbWUobiksIHBvaW50cyhwKSB7IH0KCXN0cmluZyBHZXROYW1lKCkgeyByZXR1cm4gbmFtZTsgfQoJaW50IEdldFBvaW50cygpIHsgcmV0dXJuIHBvaW50czsgfQoJdm9pZCBJbmZvKCkgeyBjb3V0IDw8IG5hbWUgPDwgIiAiIDw8IHBvaW50cyA8PCBlbmRsOyB9Cn07CgpjbGFzcyBQUk9CTEVNUyB7CnByaXZhdGU6CglpbnQgbnVtYmVyOwkJCS8vIGFjdHVhbCBudW1iZXIgb2YgcHJvYmxlbXMKCVBST0JMRU0gdGFza3NbMTAwXTsgCQkvLyBtYXggbnVtYmVyCnB1YmxpYzoKCVBST0JMRU1TKGludCBuKSA6IG51bWJlcihuKSB7IH0KCXZvaWQgQWRkUHJvYmxlbShpbnQgaSwgUFJPQkxFTSYgcCkgeyB0YXNrc1tpXSA9IHA7IH0KCXZvaWQgSW5mbygpIHsgZm9yKGludCBpPTA7aTxudW1iZXI7aSsrKSB0YXNrc1tpXS5JbmZvKCk7IH0KCXZvaWQgU29ydGVkSW5mbygpOwp9OwoKY2xhc3MgRVhBTSA6IHB1YmxpYyBFVkVOVCwgcHVibGljIFBST0JMRU1TIHsKcHVibGljOgoJRVhBTShFVkVOVCBlLCBQUk9CTEVNUyBwKSA6IEVWRU5UKGUpLCBQUk9CTEVNUyhwKSB7fQoJdm9pZCBJbmZvKCkKCXsKCQlFVkVOVCgqdGhpcykuSW5mbygpOwoJCVBST0JMRU1TKCp0aGlzKS5JbmZvKCk7Cgl9Cgl2b2lkIFNvcnRlZEluZm8oKTsKfTsKCgp2b2lkIFNvcnRCeURhdGUoRVhBTSoqLCBpbnQpOwoKaW50IG1haW4oKQp7CglzdHJpbmcgZGF0ZSwgbmFtZTsKCWludCBudW07CglpbnQgcHM7CglFWEFNKiBsaXN0WzEwMF07IAkvLyBtYXguIG51bWJlciBvZiBleGFtcwoKCWNpbiA+PiBudW07CgoJZm9yKGludCBpPTA7IGk8bnVtOyBpKyspCgl7CgkJY2luID4+IGRhdGUgPj4gbmFtZSA+PiBwczsKCQlFWEFNKiBleGFtID0gbmV3IEVYQU0oRVZFTlQoZGF0ZSxuYW1lKSxQUk9CTEVNUyhwcykpOwoJCWxpc3RbaV0gPSBleGFtOwoKCQlmb3IoaW50IGo9MDsgajxwczsgaisrKQoJCXsKCQkJc3RyaW5nIG5hbWU7CgkJCWludCBwdHM7CgkJCWNpbiA+PiBuYW1lID4+IHB0czsKCQkJUFJPQkxFTSBwKG5hbWUscHRzKTsKCQkJZXhhbS0+QWRkUHJvYmxlbShqLCBwKTsKCQl9Cgl9CgoJU29ydEJ5RGF0ZShsaXN0LG51bSk7CgoJZm9yKGludCBpPTA7IGk8bnVtOyBpKyspIHsgbGlzdFtpXS0+U29ydGVkSW5mbygpOyBpZiAoaTxudW0tMSkgY291dCA8PCAiLS0tIiA8PCBlbmRsOyB9CgoJcmV0dXJuIDA7Cn0KCi8vIGJlZ2luOiBwYXJ0IDEsIFlvdSBhcmUgYWxsb3dlZCB0byBjaGFuZ2UgdGhlIGNvZGUgT05MWSBiZXR3ZWVuIHRoZSBicmFja2V0cyB7fSBiZWxvdyBpbiBib3RoIG1ldGhvZHMKdm9pZCBTb3J0QnlEYXRlKEVYQU0qKiBsaXN0LCBpbnQgbikKewoJZm9yKGludCBpID0gMDsgaSA8IG4gLSAxOyBpKyspCgl7CgkJZm9yKGludCBqID0gMDsgaiA8IG4gLSBpIC0gMTsgaisrKQoJCXsKCQkJaWYobGlzdFtqXS0+R2V0RGF0ZSgpID4gbGlzdFtqICsgMV0tPkdldERhdGUoKSkKCQkJCXN3YXAobGlzdFtqXSwgbGlzdFtqICsgMV0pOwoJCX0KCX0KfQoKdm9pZCBFWEFNOjpTb3J0ZWRJbmZvKCkKewoJUFJPQkxFTVM6OlNvcnRlZEluZm8oKTsKCUluZm8oKTsKfQoKdm9pZCBQUk9CTEVNUzo6U29ydGVkSW5mbygpCnsKCWZvcihpbnQgaSA9IDA7IGkgPCBudW1iZXIgLSAxOyBpKyspCgl7CgkJZm9yKGludCBqID0gMDsgaiA8IG51bWJlciAtIGkgLSAxOyBqKyspCgkJewoJCQlpZih0YXNrc1tqXS5HZXRQb2ludHMoKSA9PSB0YXNrc1tqICsgMV0uR2V0UG9pbnRzKCkpCgkJCXsKCQkJCWlmKHRhc2tzW2pdLkdldE5hbWUoKSA+IHRhc2tzW2ogKyAxXS5HZXROYW1lKCkpCgkJCQkJc3dhcCh0YXNrc1tqXSwgdGFza3NbaiArIDFdKTsKCQkJfQoJCQlpZih0YXNrc1tqXS5HZXRQb2ludHMoKSA8IHRhc2tzW2ogKyAxXS5HZXRQb2ludHMoKSkKCQkJCXN3YXAodGFza3Nbal0sIHRhc2tzW2ogKyAxXSk7CgkJfQoJfQp9Ci8vIGVuZDogcGFydCAx
MgoyMDIxLTAxLTE4IGZpbmFsLWV4YW0tMSA1ClByb2JsZW0xIDUKUHJvYmxlbTIgNQpQcm9ibGVtMyAxNQpQcm9ibGVtNCA1ClByb2JsZW01IDE1CjIwMjEtMDEtMTAgZmluYWwtZXhhbS0yIDMKUHJvYmxlbTEgNQpQcm9ibGVtMiA1ClByb2JsZW0zIDE1
2
2021-01-18 final-exam-1 5
Problem1 5
Problem2 5
Problem3 15
Problem4 5
Problem5 15
2021-01-10 final-exam-2 3
Problem1 5
Problem2 5
Problem3 15