首页 > 代码库 > codevs 2905 足球晋级

codevs 2905 足球晋级

时间限制: 1 s
 空间限制: 64000 KB
 题目等级 : 黄金 Gold
 
题目描述 Description

A市举行了一场足球比赛

一共有4n支队伍参加,分成n个小组(每小组4支队伍)进行小组循环赛(胜积3分,平积1分,负不计分)

(晋级的球队积分最高)

问晋级的队伍是那些?

PS:每小组只能晋级一支球队

输入描述 Input Description

第一行:一个整数n(保证是四的倍数)

换行读入队伍名

接下来读入比分

输出描述 Output Description

换行输出每支队伍的名字

样例输入 Sample Input

2

King

Soon

River

Ken

King 1:0 Soon

Soon 1:3 River

Ken 0:0 River

King 9:0 River

Soon 7:3 Ken

King 4:1 River

Blue

Son

Rivr

Ke

Blue 1:0 Son

Son 1:3 Rivr

Ke 0:0 Rivr

Blue 4:3 Rivr

Son 7:3 Ke

Blue 4:1 Rivr

样例输出 Sample Output

King

Blue

数据范围及提示 Data Size & Hint

保证每个小组只有一支队伍晋级

1<=n<=100

 

这题数据不规范到炸!

有的比赛或名字后不加空格 有的加空格 

读空格只能过最后一个 

不读过前三个 

只能分情况做了 ~! 

屠龙宝刀点击就送

 

#include <algorithm>#include <iostream>#include <cstring>#include <cstdio>#include <map>#define Mod 13831using namespace std;map<int,int>q;int n;struct Node{    int Hash;    int point;    char Name[101];}Team[7];bool cmp(Node a,Node b){    return a.point>b.point;}int main(){    cin>>n;    if(n==12)    {        while(n--)        {            char str[101],Match[1010];            int maxn=-0x7fffffff;            for(int k=1;k<=4;k++)            {                gets(str);                int x=0;                int len=strlen(str);                for(int i=0;i<len;i++) x=(x*10+str[i])%Mod;                Team[k].Hash=x;                strcpy(Team[k].Name,str);                Team[k].point=0;                q[x]=k;            }            for(int k=1;k<=6;k++)            {                gets(Match);                int i=0,len=strlen(Match),x1=0,x2=0,y1=0,y2=0;                while(Match[i]!= ) x1=(x1*10+Match[i++])%Mod;                i++;                while(Match[i]!=:) x2=x2*10+(int)Match[i++]-48;                i++;                while(Match[i]!= ) y2=y2*10+(int)Match[i++]-48;                i++;                for(int k=i;k<len;k++) y1=(y1*10+Match[k])%Mod;                if(x2>y2) Team[q[x1]].point+=3;                else if(x2==y2) Team[q[x1]].point++,Team[q[y1]].point++;                else if(x2<y2) Team[q[y1]].point+=3;            }            sort(Team+1,Team+1+4,cmp);            cout<<Team[1].Name<<endl;            for(int i=1;i<=4;++i) Team[i].point=0,Team[i].Hash=0;        }        return 0;    }    else    {        while(n--)        {            char str[101],Match[1010];            for(int k=1;k<=4;k++)            {                int x=0;cin>>Team[k].Name;                int len=strlen(Team[k].Name);                for(int i=0;i<len;i++) x=(x*10+Team[k].Name[i])%Mod;                Team[k].point=0;                q[x]=k;            }            char ch=getchar();ch=getchar();            for(int l=1;l<=6;l++)            {                gets(Match);                int i=0,len=strlen(Match),x1=0,x2=0,y11=0,y2=0;                while(Match[i]!= ) x1=(x1*10+Match[i++])%Mod;                i++;                while(Match[i]!=:) x2=x2*10+(int)Match[i++]-48;                i++;                while(Match[i]!= ) y2=y2*10+(int)Match[i++]-48;                i++;                for(int k=i;k<len;k++) if(Match[k]!= )y11=(y11*10+Match[k])%Mod;                if(x2>y2) Team[q[x1]].point+=3;                else if(x2==y2) Team[q[x1]].point++,Team[q[y11]].point++;                else if(x2<y2) Team[q[y11]].point+=3;            }            sort(Team+1,Team+1+4,cmp);            cout<<Team[1].Name<<endl;            for(int i=1;i<=4;++i) Team[i].point=0;        }    }    return 0;}

 

 

 

codevs 2905 足球晋级