【NOIP practice】BSOJ 3140 冲出亚洲 模拟

29 篇文章 0 订阅
11 篇文章 0 订阅
3140 -- 【刘峻琳day1-1】冲出亚洲
Description
  南非世界杯的硝烟散去不久,眼见着2014巴西世界杯就要来了,被国人不抱希望的中国国家男子足球队(简称中国队)在没有多少人的关注下再度整装出发,参加亚洲区外围赛(简称亚预赛)。中国队在艰难击败了马尔代夫,尼泊尔,东帝汶等强队之后,杀入了亚预赛十强赛。为了降低题目难度,本次十强赛的规则作了一定改变。首先十强赛改为n强赛,n只球队不再分为两组,而是直接进行主客场双循环比赛,最终积分榜前2名的球队直接进入巴西世界杯,第3名的球队将与大洋洲冠军新西兰(常识普及:澳大利亚已加入了亚足联)队争夺一张入场券。由于中国足协的电脑过于老化,无法应付这庞大的积分计算,现在请你在(n-1)*2轮比赛过后统计出结果,并告诉国人中国队是否出线。 
  友情提示:足球比赛中,获胜的球队将获得3分的积分,失利的球队获得0分的积分,打平双方各得1分。总积分越高者排名越靠前,积分相同时,比较两队净胜球(总进球-总失球),净胜球多者排名靠前,净胜球相同时,进球多者排名靠前。比赛保证不会出现上述数据完全相同的两支球队。 
Input
  第一行有一个整数n,代表参赛球队的数量,接下来n行,每行一个字符串,为进入n强赛的一个国家。 
  接下来有(n-1)*2*(n/2)行,每(n/2)行代表一轮比赛,每一行代表一场比赛结果,分明是由空格隔开的国家名、进球数、冒号、进球数、国家名。 
  最后有一行,一个字母,表示第3名与新西兰比赛的结果,Y表示胜,N表示负。
Output
  输出有两行。 
  第一行是中国队n强赛的最终排名。 
  第二行是一个字符串,如果出线,请输出"Brazil, we are coming!",否则输出"Go home, China Team!",不含引号。
Sample Input
4
China
Japan
Korea
Iran
China 2 : 1 Japan
Korea 2 : 2 Iran
Iran 0 : 3 China
Japan 1 : 1 Korea
Korea 2 : 0 China
Iran 2 : 1 Japan
Japan 2 : 0 China
Iran 0 : 1 Korea
China 3 : 1 Iran
Korea 3 : 3 Japan
Japan 2 : 4 Iran
China 5 : 1 Korea
Y
#include<iostream>
#include<iomanip>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdio>
using namespace std;
void File_Format()
{
	freopen("gogogo.in","r",stdin);
	freopen("gogogo.out","w",stdout);
}
int n;
struct TEAM
{
	int score,pure,goal,seq;
	char name[505];
	TEAM()
	{
		score=pure=goal=0;
	}
}a[100005];
char kk[505]={0};
void Getdata()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)scanf("%s",&a[i].name);
	int x,y,g1,g2;
	for(int i=1;i<=n*(n-1);i++)
	{
		scanf("%s",&kk);
		for(int j=1;j<=n;j++)
		{
			if(!strcmp(kk,a[j].name))
			{
				x=j;break;
			}
		}
		scanf("%d : %d",&g1,&g2);
		scanf("%s",&kk);
		for(int j=1;j<=n;j++)
		{
			if(!strcmp(kk,a[j].name))
			{
				y=j;break;
			}
		}
		a[x].goal+=g1;
		a[y].goal+=g2;
		a[x].pure+=g1-g2;
		a[y].pure+=g2-g1;
		if(g1>g2)a[x].score+=3;
		else if(g1==g2){a[x].score++;a[y].score++;}
		else if(g1<g2)a[y].score+=3;
	}
}
bool cmp(TEAM x,TEAM y)
{
	return (x.score>y.score)||(x.score==y.score&&x.pure>y.pure)||(x.score==y.score&&x.pure==y.pure&&x.goal>y.goal);
}
int main(){
	//File_Format();
	Getdata();
	sort(a+1,a+n+1,cmp);
	char ch;
	cin>>ch;
	int ans;
	for(int i=1;i<=n;i++)
	{
		if(!strcmp(a[i].name,"China"))
		{
			ans=i;
			break;
		}
	}
	printf("%d\n",ans);
	if(ans<=2||(ans==3&&ch=='Y'))
	{
		puts("Brazil, we are coming!");
	}
	else puts("Go home, China Team!");
	return 0;
}




Sample Output
1
Brazil, we are coming!
Hint

  4<=n<=10,n为偶数,国家名字长度不超过20。



把进球净胜球胜局名称全都丢到结构里,最后自定义一下sort即可

一直没用过strcmp(),要是比较两个char[]相同,返回值为0.

另外输入char[]用scanf("%s",&xxx);



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值