理清楚逻辑关系,写好比较函数,提高打字速度。。。
本来还想打个map优化一下,看到30的数据量果断暴力,就是个考打字的题目。。。
points是最终得分,wins是赢局数,loss是输局数,drwas是平局数,gain scored是进球数,gain allowed是失球数。
points = 3 * wins + draws
#include <bits/stdc++.h> using namespace std; const int N = 40; typedef struct team{ string name; int points, wins, loss, draws, gscored, gallowed; }team; team ateam[N]; inline bool cmp(const team &a, const team &b){ if(a.points > b.points) return true; else if(a.points == b.points){ int adis = a.gscored - a.gallowed, bdis = b.gscored - b.gallowed; if(adis > bdis) return true; else if(adis == bdis){ if(a.gscored > b.gscored) return true; else if(a.gscored == b.gscored){ if(a.name[0] < b.name[0]) return true; } } } return false; } inline int finds(string tar, int t){ for(int i = 1; i <= t; i++) if(!strcmp(tar.c_str(), ateam[i].name.c_str())) return i; } int main(){ ios_base::sync_with_stdio(false); int n = 0; cin >> n; for(int times = 1; times <= n; times++){ memset(ateam, 0, sizeof(ateam)); int t, g; cin >> t >> g; for(int i = 1; i <= t; i++){ string tmp_name; cin >> tmp_name; ateam[i].name = tmp_name; } for(int i = 1; i <= g; i++){ string teama, teamb; int sca, scb; cin >> teama >> sca >> teamb >> scb; int flaga = finds(teama, t), flagb = finds(teamb, t); ateam[flaga].gscored += sca, ateam[flagb].gscored += scb; ateam[flaga].gallowed += scb, ateam[flagb].gallowed += sca; if(sca == scb) ateam[flaga].draws += 1, ateam[flagb].draws += 1; else if(sca > scb) ateam[flaga].wins += 1, ateam[flagb].loss += 1; else if(sca < scb) ateam[flaga].loss += 1, ateam[flagb].wins += 1; } for(int i = 1; i <= t; i++) ateam[i].points = ateam[i].wins * 3 + ateam[i].draws; sort(ateam + 1, ateam + t + 1, cmp); cout << "Group " << times << ":" << endl; for(int i = 1; i <= t; i++){ team now = ateam[i]; cout << now.name << ' ' << now.points << ' ' << now.wins << ' ' << now.loss << ' ' << now.draws << ' ' << now.gscored << ' ' << now.gallowed << endl; } cout << endl; } return 0; }