#include #include #include #include #include using namespace std; struct TeamInfo { int points, goals; string name; TeamInfo() : points(0), goals(0) { } TeamInfo(string &name) : points(0), goals(0), name(name) { } }; void AddInfo(string &t1, string &t2, int g1, int g2, map &teamMap) { map::iterator it; it = teamMap.find(t1); if (it == teamMap.end()) teamMap[t1] = TeamInfo(t1); it = teamMap.find(t2); if (it == teamMap.end()) teamMap[t2] = TeamInfo(t2); TeamInfo &ti1 = teamMap[t1]; TeamInfo &ti2 = teamMap[t2]; ti1.goals += g1; ti2.goals += g2; if (g1 > g2) ti1.points += 3; else if (g1 == g2) { ti1.points++; ti2.points++; } else ti2.points += 3; } bool TeamCompare(TeamInfo &t1, TeamInfo &t2) { if (t1.points > t2.points) return true; if (t1.points < t2.points) return false; if (t1.goals > t2.goals) return true; if (t1.goals < t2.goals) return false; return (t1.name.compare(t2.name)); } void ProcessInfo(map &teamMap) { vector teams; map::iterator it; for (it = teamMap.begin(); it != teamMap.end(); it++) { teams.push_back(it->second); } sort(teams.begin(), teams.end(), TeamCompare); for (int i = 0; i < teams.size(); i++) { cout << teams[i].name << endl; } } int main() { map teamMap; for (int i = 0; i < 6; i++) { string t1, t2; int g1, g2; cin >> t1 >> t2 >> g1 >> g2; AddInfo(t1, t2, g1, g2, teamMap); } ProcessInfo(teamMap); return 0; }