preloader image
6. 世界杯来了

6. 世界杯来了

【问题描述】

2018年俄罗斯世界杯结束了,法国获得冠军,全世界球迷度过了一个非常愉快的夏天。作为中国球迷,不能总是看别人踢球,这不福利来了,根据FIFA(国际足联)及全体成员协会的一致决定,2118年世界杯将在中国举办,作为东道主,中国队将无需参加预选赛而直接参加决赛阶段的比赛。

比赛规则如下:

总共n(n为偶数)个球队参加比赛

按照分组赛积分排名,前n/2的球队进入淘汰赛

积分排名的规则如下:球队获胜得3分,平局得1分,失利得0分,按照积分递减、净胜球递减以及进球数递减方式排名

编写一个程序,根据给出的参赛队伍名单和所有比赛的结果,找出成功进入淘汰赛阶段的球队名单。

【输入形式】

第一行输入包含唯一整数n(1<=n<=50),参加世界杯决赛的球队数量。接下来的n行是各球队的名字,为长度不超过30个字符的英文字符。接下来的n*(n-1)/2行,每行格式name1-name2 num1:num2(0<=num1, num2<=100),表示对阵球队及比分.

【输出形式】

输入n/2行,表示进入淘汰赛阶段的球队,按照字典序进行排列,每个球队名字占一行。

【样例输入】

4

A

B

C

D

A-B 1:1

A-C 2:2

A-D 1:0

B-C 1:0

B-D 0:3

C-D 0:3

【样例输出】

A

D

#include

#include

using namespace std;

struct Team

{

string name;

int score=0;

int ncount=0;

int mcount=0;

};

bool cmp(Team a, Team b)

{

if (a.score==b.score)

{

if(a.ncount==b.ncount)

return a.mcount>b.mcount;

else

return a.ncount>b.ncount;

}

else

return a.score>b.score;

}

mapmaps;

bool cmp1(Team a,Team b)

{

return maps[a.name]

}

int main()

{

int n;

cin>>n;

Team team[n];

for(int i=0;i

{

string str;

cin>>str;

team[i].name=str;

maps[str]=i;

}

int m=n*(n-1)/2;

for(int i=0;i

{

string team1,team2,vs,st;

char vt;

int score1,score2;

cin>>st>>score1>>vt>>score2;//A-B 3:2

stringstream ss(st);

string sub_str;

getline(ss,sub_str,'-');

team1=sub_str;

getline(ss,sub_str,'-');

team2=sub_str;

int n1=maps[team1],n2=maps[team2];

team[n1].mcount+=score1;

team[n2].mcount+=score2;

if(score1!=score2)

{

if(score1>score2)

{

team[n1].score+=3;

team[n1].ncount+=abs(score1-score2);

team[n2].ncount-=abs(score1-score2);

}

else

{

team[n2].score+=3;

team[n2].ncount+=abs(score1-score2);

team[n1].ncount-=abs(score1-score2);

}

}

else

{

team[n1].score+=1;

team[n2].score+=1;

}

}

sort(team,team+n,cmp);

for(int i=0;i

{

sort(team,team+n/2,cmp1);

cout<

}

return 0;

}

Copyright © 2088 世界杯足球几年一次|足球世界杯图片|关怀星球世界杯公益关怀站|planetpeduli.com All Rights Reserved.
友情链接