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 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;
}
我们都在命运之湖上荡舟划桨,波浪起伏着而我们无法逃脱孤航。但是假使我们迷失了方向,波浪将指引我们穿越另一天的曙光。
原文地址:https://www.cnblogs.com/ruojisun/p/6710638.html