#include <iostream>
#include <unordered_map>
#include <vector>
#include <string>
#include <sstream>
#include <algorithm>
using namespace std;
class Klasemen {
private:
unordered_map<string, int> clubScoreMap;
bool changed;
vector<string> cachedKlasemen;
void sortKlasemen() {
sort(cachedKlasemen.begin(), cachedKlasemen.end(),
[&](const string& a, const string& b) {
if (clubScoreMap[a] != clubScoreMap[b]) {
return clubScoreMap[a] > clubScoreMap[b];
}
return a < b;
}
);
}
public:
Klasemen(vector<string> clubs) {
for (string s : clubs) {
clubScoreMap[s] = 0;
cachedKlasemen.push_back(s);
}
changed = true;
}
void catatPermainan(string klubKandang, string klubTandang, string skor) {
vector<int> points;
stringstream ss(skor);
string poin;
while (getline(ss, poin, ':')) {
points.push_back(stoi(poin));
}
if (points[0] > points[1]) {
clubScoreMap[klubKandang] += 3;
} else if (points[0] < points[1]) {
clubScoreMap[klubTandang] += 3;
} else {
clubScoreMap[klubKandang] += 1;
clubScoreMap[klubTandang] += 1;
}
changed = true;
}
vector<string> cetakKlasemen() {
if (changed) {
sortKlasemen();
changed = false;
}
return cachedKlasemen;
}
string ambilPeringkat(int nomorPeringkat) {
if (changed) {
sortKlasemen();
changed = false;
}
if(nomorPeringkat <= 0 || nomorPeringkat > cachedKlasemen.size()){
return "Peringkat tidak sesuai";
}
return cachedKlasemen[nomorPeringkat - 1];
}
};
int main() {
Klasemen klasemen({"Liverpool", "Chelsea", "Arsenal"});
klasemen.catatPermainan("Arsenal", "Liverpool", "2:1");
klasemen.catatPermainan("Arsenal", "Chelsea", "1:1");
klasemen.catatPermainan("Chelsea", "Arsenal", "0:3");
klasemen.catatPermainan("Chelsea", "Liverpool", "3:2");
klasemen.catatPermainan("Liverpool", "Arsenal", "2:2");
klasemen.catatPermainan("Liverpool", "Chelsea", "0:0");
vector<string> hasil = klasemen.cetakKlasemen();
cout << "Klasemen:" << endl;
for (const string& club : hasil) {
cout << club << endl;
}
cout << endl;
cout << klasemen.ambilPeringkat(2) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHNzdHJlYW0+CiNpbmNsdWRlIDxhbGdvcml0aG0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBLbGFzZW1lbiB7Cglwcml2YXRlOgoJCXVub3JkZXJlZF9tYXA8c3RyaW5nLCBpbnQ+IGNsdWJTY29yZU1hcDsKCQlib29sIGNoYW5nZWQ7CgkJdmVjdG9yPHN0cmluZz4gY2FjaGVkS2xhc2VtZW47CgkJCgkJdm9pZCBzb3J0S2xhc2VtZW4oKSB7CgkJCXNvcnQoY2FjaGVkS2xhc2VtZW4uYmVnaW4oKSwgY2FjaGVkS2xhc2VtZW4uZW5kKCksCgkJCQlbJl0oY29uc3Qgc3RyaW5nJiBhLCBjb25zdCBzdHJpbmcmIGIpIHsKCQkJCQlpZiAoY2x1YlNjb3JlTWFwW2FdICE9IGNsdWJTY29yZU1hcFtiXSkgewoJCQkJCQlyZXR1cm4gY2x1YlNjb3JlTWFwW2FdID4gY2x1YlNjb3JlTWFwW2JdOwoJCQkJCX0KCQkJCQlyZXR1cm4gYSA8IGI7CgkJCQl9CgkJCSk7CgkJfQoJCglwdWJsaWM6CgkJCUtsYXNlbWVuKHZlY3RvcjxzdHJpbmc+IGNsdWJzKSB7CgkJCWZvciAoc3RyaW5nIHMgOiBjbHVicykgewoJCQkJY2x1YlNjb3JlTWFwW3NdID0gMDsKCQkJCWNhY2hlZEtsYXNlbWVuLnB1c2hfYmFjayhzKTsKCQkJfQoJCQkKCQkJY2hhbmdlZCA9IHRydWU7CgkJfQoJCgkJdm9pZCBjYXRhdFBlcm1haW5hbihzdHJpbmcga2x1YkthbmRhbmcsIHN0cmluZyBrbHViVGFuZGFuZywgc3RyaW5nIHNrb3IpIHsKCQkJdmVjdG9yPGludD4gcG9pbnRzOwoJCgkJCXN0cmluZ3N0cmVhbSBzcyhza29yKTsKCQkJc3RyaW5nIHBvaW47CgkKCQkJd2hpbGUgKGdldGxpbmUoc3MsIHBvaW4sICc6JykpIHsKCQkJCXBvaW50cy5wdXNoX2JhY2soc3RvaShwb2luKSk7CgkJCX0KCSAgICAgICAgCgkJCWlmIChwb2ludHNbMF0gPiBwb2ludHNbMV0pIHsKCQkJCWNsdWJTY29yZU1hcFtrbHViS2FuZGFuZ10gKz0gMzsKCQkJfSBlbHNlIGlmIChwb2ludHNbMF0gPCBwb2ludHNbMV0pIHsKCQkJCWNsdWJTY29yZU1hcFtrbHViVGFuZGFuZ10gKz0gMzsKCQkJfSBlbHNlIHsKCQkJCWNsdWJTY29yZU1hcFtrbHViS2FuZGFuZ10gKz0gMTsKCSAgICAgICAgICAgIGNsdWJTY29yZU1hcFtrbHViVGFuZGFuZ10gKz0gMTsKCQkJfQoJICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKCSAgICB9CgkKCQl2ZWN0b3I8c3RyaW5nPiBjZXRha0tsYXNlbWVuKCkgewoJICAgIAlpZiAoY2hhbmdlZCkgewoJCQkJc29ydEtsYXNlbWVuKCk7CgkJCQljaGFuZ2VkID0gZmFsc2U7CgkgICAgCX0KCQkJcmV0dXJuIGNhY2hlZEtsYXNlbWVuOwoJICAgIH0KCQoJCXN0cmluZyBhbWJpbFBlcmluZ2thdChpbnQgbm9tb3JQZXJpbmdrYXQpIHsKCSAgICAJaWYgKGNoYW5nZWQpIHsKCQkJCXNvcnRLbGFzZW1lbigpOwoJCQkJY2hhbmdlZCA9IGZhbHNlOwoJICAgIAl9CgkgICAgCWlmKG5vbW9yUGVyaW5na2F0IDw9IDAgfHwgbm9tb3JQZXJpbmdrYXQgPiBjYWNoZWRLbGFzZW1lbi5zaXplKCkpewoJICAgIAkJcmV0dXJuICJQZXJpbmdrYXQgdGlkYWsgc2VzdWFpIjsKCSAgICAJfQoJCQlyZXR1cm4gY2FjaGVkS2xhc2VtZW5bbm9tb3JQZXJpbmdrYXQgLSAxXTsKCQl9Cn07CgppbnQgbWFpbigpIHsKCUtsYXNlbWVuIGtsYXNlbWVuKHsiTGl2ZXJwb29sIiwgIkNoZWxzZWEiLCAiQXJzZW5hbCJ9KTsKCQoJa2xhc2VtZW4uY2F0YXRQZXJtYWluYW4oIkFyc2VuYWwiLCAiTGl2ZXJwb29sIiwgIjI6MSIpOwoJa2xhc2VtZW4uY2F0YXRQZXJtYWluYW4oIkFyc2VuYWwiLCAiQ2hlbHNlYSIsICIxOjEiKTsKCWtsYXNlbWVuLmNhdGF0UGVybWFpbmFuKCJDaGVsc2VhIiwgIkFyc2VuYWwiLCAiMDozIik7CglrbGFzZW1lbi5jYXRhdFBlcm1haW5hbigiQ2hlbHNlYSIsICJMaXZlcnBvb2wiLCAiMzoyIik7CglrbGFzZW1lbi5jYXRhdFBlcm1haW5hbigiTGl2ZXJwb29sIiwgIkFyc2VuYWwiLCAiMjoyIik7CglrbGFzZW1lbi5jYXRhdFBlcm1haW5hbigiTGl2ZXJwb29sIiwgIkNoZWxzZWEiLCAiMDowIik7CiAgICAKCXZlY3RvcjxzdHJpbmc+IGhhc2lsID0ga2xhc2VtZW4uY2V0YWtLbGFzZW1lbigpOwogICAgCgljb3V0IDw8ICJLbGFzZW1lbjoiIDw8IGVuZGw7CiAgICBmb3IgKGNvbnN0IHN0cmluZyYgY2x1YiA6IGhhc2lsKSB7CgkJY291dCA8PCBjbHViIDw8IGVuZGw7Cgl9CgkKCWNvdXQgPDwgZW5kbDsKCWNvdXQgPDwga2xhc2VtZW4uYW1iaWxQZXJpbmdrYXQoMikgPDwgZW5kbDsKCQoJcmV0dXJuIDA7Cn0=