1.6世界杯

题目:

【问题描述】

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

规则:

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

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

【输入形式】

   第一行输入包含唯一整数n(1<=n<=50),球队数量。
   接下来的n行是各球队的名字
   接下来的n*(n-1)/2行,
   每行格式name1-name2 num1:num2//恶心点
   (0<=num1, num2<=100),表示对阵球队及比分. 

【输出形式】

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

字符串相关函数参考:

https://blog.csdn.net/qq_43309286/article/details/93191767

用于处理题目里恶心的麻烦输入,空格不好吗非要来个 ‘-’ ‘ :’

stringstream相关函数参考

https://www.cnblogs.com/feifanrensheng/articles/9086722.html

  1. find
  2. substr
  3. stringstream:读取字符串里的int;
    ignore函数

字典序排序

直接用<

代码

#include<iostream>
#include<algorithm>
#include<sstream>
using namespace std;
struct team
{
	string name;
	int score=0;
	int clearBall=0;
	int ball=0;
};
int findS(string s,team* t,int n)
{
	for(int i=0;i<n;i++)
		if(s==t[i].name) return i;
}
bool cmp(team x,team y)
{
	if(x.score != y.score) return x.score > y.score;
	if(x.clearBall != y.clearBall) return x.clearBall > y.clearBall;
	else return x.ball>y.ball;
}
bool cmp2(team x,team y)
{
	return x.name<y.name;
}

int main()
{
	int n;cin>>n;
	team t[n];
	for(int i=0;i<n;i++)
		cin>>t[i].name;
	string str1,str2,s1,s2;
	int index,x,y,i1,i2,a,b;
	for(int i=0;i<n*(n-1)/2;i++)
	{
		cin>>str1>>str2;
		
		index=str1.find("-");
		s2=str1.substr(index+1);
		s1=str1.substr(0,index);
		i1=findS(s1,t,n);i2=findS(s2,t,n);
		stringstream in(str2);
		in>>a;
		in.ignore(100,':');
		in>>b;
		
		if(a>b) {x=3;y=0;}
		else if(a<b) {x=0;y=3;}
		else x=y=1;
		t[i1].score+=x; t[i2].score+=y;
		t[i1].clearBall+=a-b; t[i2].clearBall+=b-a;
		t[i1].ball+=a;t[i2].ball+=b;
	}
	sort(t,t+n,cmp);
	sort(t,t+n/2,cmp2);
	for(int i=0;i<n/2;i++)
		cout<<t[i].name<<endl;	
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值