理清楚逻辑关系,写好比较函数,提高打字速度。。。

本来还想打个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; 
}