时间限制: 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 13831 using 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; }