HDU-1225-Football Score

#include<iostream>
#include<string>
#include<queue>
#include<map>
#include<set>
#include<vector>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
/*
    这道题其实很简单,用结构体排序,便可以处理;可是大家可能不知道怎么让队名和结构体内的元素
    对应起来,这是个关键;所以这里我就写了个Find()函数;如果在结构体中有找到这个队名,那么返回下标;
    这样我们就可以直接对结构体中的值进行更新了;如果没有找到,那么结构体数组成员加一,添加新的队名;
    考察的是:字符串的处理+结构体排序;
*/
struct node
{
    int score=0,inoutballs=0,inball=0;
    string name="";
}player[50005];
int t;
int Find(string s)  //  自定义Find函数,查找结构体数组中是否存在该队名
{
    for(int i=0;i<t;i++){
        if(player[i].name==s) return i; //  存在则返回对应结构体数组下标
    }
    player[t++].name=s;     //  不存在则添加新的结构体队名;
    return t-1;             //  并且还回添加的队名对应的结构体数组下标
}
bool cmp(node x,node y)     //  符合要求的自定义结构体排序;
{
    if(x.score!=y.score) return x.score>y.score;
    else if(x.inoutballs!=y.inoutballs) return x.inoutballs>y.inoutballs;
    else if(x.inball!=y.inball) return x.inball>y.inball;
    else return x.name<y.name;
}
int main()
{
    int n,p,q,m,l;
    string h,o,ch1;
    char ch2;
    cin.sync_with_stdio(false);
    while(cin>>n){
        t=0;
        for(int i=0;i<n*(n-1);i++){
            player[i].score=0;
            player[i].inoutballs=0;
            player[i].inball=0;
            player[i].name="";
        }
        for(int i=0;i<n*(n-1);i++){
            cin>>h>>ch1>>o>>p>>ch2>>q;
            m=Find(h);
            l=Find(o);
            //  对进球得分进行统计;
            if(p>q){
                player[m].score+=3;
                player[m].inoutballs+=(p-q);
                player[m].inball+=p;
                player[l].inoutballs+=(q-p);
                player[l].inball+=q;
            }else if(p==q){
                player[m].score+=1;
                player[m].inball+=p;
                player[l].score+=1;
                player[l].inball+=q;
            }else{
                player[l].score+=3;
                player[l].inoutballs+=(q-p);
                player[l].inball+=q;
                player[m].inoutballs+=(p-q);
                player[m].inball+=p;
            }
        }
        sort(player,player+t,cmp);
        for(int i=0;i<t;i++){
            cout<<player[i].name<<' '<<player[i].score<<endl;
        }
        cout<<endl;
    }
    return 0;
}

你可能感兴趣的:(字符串处理,结构体排序,HDU1225)