【问题描述】
欧洲冠军联赛常被誉为全世界最具影响力的俱乐部级赛事。在比赛的小组赛阶段,欧洲的各个足球俱乐部被分为八个小组,每个小组中四支球队。每个小组中的球队按照如下规则排序:
-
球队会根据比赛结果获得积分。一场比赛的双方被称为主队和客队。如果其中一方进球数多于另一方,那么进球较多的一方获得3 分,另一方获得0 分。如果双方打成平手,则各得1分。
-
球队的净胜球数是其进球数减去失球数(不考虑该球队在比赛中作为主队还是客队)。
-
积分较高的球队排名更加靠前。
-
如果两支球队积分相同,那么净胜球数较多的球队排名靠前。
小组的各队伍进行循环赛,即每两支球队之间进行两场比赛,双方交替作为主队。给定一个小组内12 场比赛的结果,请求出小组的出线队伍:即排名第一和第二的两支球队。
保证答案唯一。
【输入形式】
输入的第一行包含一个整数T,代表测试数据的组数。接下来是 T 组数据。
每组数据共有12 行,每行描述一场比赛,格式为:“主队队名主队进球数vs. 客队进球数客队队名”,其中“主队队名”和“客队队名”为字符串,“主队进球数”和“客队进球数”为两球队在本场比赛中各自的进球数量。
-
-
1 ≤ T ≤ 50
-
球队队名仅包含小写英文字母
-
球队队名长度不超过10 个字符
-
0 ≤ 进球数 ≤ 100
-
【输出形式】
对于每组数据,输出一行,包含两个字符串,代表排名第一和第二的球队的队名。
【样例输入】
2 manutd 8 vs. 2 arsenal lyon 1 vs. 2 manutd fcbarca 0 vs. 0 lyon fcbarca 5 vs. 1 arsenal manutd 3 vs. 1 fcbarca arsenal 6 vs. 0 lyon arsenal 0 vs. 0 manutd manutd 4 vs. 2 lyon arsenal 2 vs. 2 fcbarca lyon 0 vs. 3 fcbarca lyon 1 vs. 0 arsenal fcbarca 0 vs. 1 manutd a 3 vs. 0 b a 0 vs. 0 c a 0 vs. 0 d b 0 vs. 0 a b 4 vs. 0 c b 0 vs. 0 d c 0 vs. 0 a c 0 vs. 0 b c 1 vs. 0 d d 3 vs. 0 a d 0 vs. 0 b d 0 vs. 0 c
【样例输出】
manutd fcbarca d b
#include<bits/stdc++.h>
using namespace std;//用结构体
struct compa {
int score;//积分
string name;
int ballsum;//净进球数
};
bool cmp(compa,compa);
int finds(string,compa s[]);//判断是否已经存储在了结构体数组中
int main() {
int t;//测试组数,每组12行
cin>>t;
cin.get();//吸收回车符
compa team[10];//一个小组四支球队
while(t--) {
int len=0;//已经存进去的球队个数
for(int i=0; i<12; i++) {
string str;
stringstream ss;
ss.clear();
string name1,name2;
int score1,score2;//name1,score1代表主队
string vs;
// cin.ignore();//吸收掉前方出现的空格
getline(cin,str);
ss<<str;
ss>>name1>>score1>>vs>>score2>>name2;
int key1=finds(name1,team);//主队
int key2=finds(name2,team);//客队
int flag1=score1-score2;//主队净进球数
int flag2=score2-score1;//客队净进球数
if(key1==-1) { //主球队数据尚未存储
team[len].name=name1;
team[len].ballsum=flag1;
if(flag1>0)team[len].score=3;
else if(flag1<0)team[len].score=0;
else if(flag1==0)team[len].score=1;
len++;
} else {主球队数据已经存储过
team[key1].ballsum+=flag1;
if(flag1>0)team[key1].score+=3;
else if(flag1<0)team[key1].score+=0;
else if(flag1==0)team[key1].score+=1;
}
if(key2==-1) { //客球队数据尚未存储
team[len].name=name2;
team[len].ballsum=flag2;
if(flag2>0)team[len].score=3;
else if(flag2<0)team[len].score=0;
else if(flag2==0)team[len].score=1;
len++;
} else {客球队数据已经存储过
team[key2].ballsum+=flag2;
if(flag2>0)team[key2].score+=3;
else if(flag2<0)team[key2].score+=0;
else if(flag2==0)team[key2].score+=1;
}
//以上两个if-else语句将每一次输入的球队信息进行分类录入team中,接下来进行按要求排序即可
}
sort(team,team+len,cmp);
cout<<team[0].name<<' '<<team[1].name<<endl;
}
return 0;
}
int finds(string str,compa s[]) {
for(int i=0; i<10; i++)
if(s[i].name==str)return i;
return -1;
}
bool cmp(compa a,compa b) {
if(a.score!=b.score)return a.score>b.score;
return a.ballsum>b.ballsum;
}