2018_2_10_Football Sort大模拟题_排序__格式

21 篇文章 0 订阅
12 篇文章 0 订阅

https://vjudge.net/problem/UVA-10698

 注意字母对应,大小写

#include<iostream>
#include<cstdio>
#include<string>
#include<vector>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
char c1[20],c2[20],c[20];
struct AA{
	string name;
	string name2;
	int pts,gms,goal,suffer,idx,gs;
	double p;
	void print(bool f,int cnt){
		if(!f)printf("%2d.",cnt);
		else printf("   ");
		printf("%16s%4d%4d%4d%4d%4d",name.c_str(),pts,gms,goal,suffer,gs);
		if(gms==0)puts("    N/A") ;
		else printf("%7.2lf\n",p);
	}
	void input(){
		gets(c);
		name=c;
		name2.clear();
		int len=strlen(c);
		for(int i=0;i<len;i++)
		name2+=tolower(c[i]);
	}
};

bool cmp(AA& a,AA& b){
	return a.name2<b.name2;
}

bool cmp2(AA& a,AA& b){
	if(a.pts==b.pts){
		if(a.gs==b.gs){
			if(a.goal==b.goal){
				return a.idx<b.idx;
			}return a.goal>b.goal;
		}return a.gs>b.gs;
	}return a.pts>b.pts;
}

bool eq(AA& a,AA& b){
	if(a.pts==b.pts&&a.gs==b.gs&&a.goal==b.goal){
		return true; 
	}return false;
}
typedef map<string,int> msi;
int main(){
	int n,m;
	int z=1;
	while(scanf("%d%d",&n,&m),n||m){
		if(z==1)z++;
		else puts("");
		getchar();
		vector<AA> v(n);
		for(int i=0;i<n;i++){
			v[i].input();
		}
		sort(v.begin(),v.end(),cmp);
		msi msi1;
		for(int i=0;i<n;i++){
			v[i].idx=i;
			msi1[v[i].name]=i;
		}
		int goal1,goal2,n1,n2;
		for(int i=0;i<m;i++){
			scanf("%s%2d -%2d %s",c1,&goal1,&goal2,c2);
			n1=msi1[c1];
			n2=msi1[c2];
			v[n1].gms++;v[n2].gms++;
			v[n1].goal+=goal1;v[n1].suffer+=goal2;
			v[n2].goal+=goal2;v[n2].suffer+=goal1;
			if(goal1<goal2){
				v[n2].pts+=3;
			}else if(goal1>goal2){
				v[n1].pts+=3;
			}else{
				v[n1].pts+=1;
				v[n2].pts+=1;
			}
		}
		for(int i=0;i<n;i++){
			v[i].gs=v[i].goal-v[i].suffer;
			if(!v[i].gms)continue;
			v[i].p=(v[i].pts*100.0)/(3.0*v[i].gms);
		}
		sort(v.begin(),v.end(),cmp2);
		
		v[0].print(false,1);
		for(int i=1;i<v.size();i++)
		if(eq(v[i],v[i-1]))v[i].print(true,i+1);
		else v[i].print(false,i+1);
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值