理清楚逻辑关系,写好比较函数,提高打字速度。。。
本来还想打个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;
}

京公网安备 11010502036488号