HDU-1225-Football Score

HDU-1225-Football Score

http://acm.hdu.edu.cn/showproblem.php?pid=1225

终于放假了,在家就是舒服,网速也变成4M的了,好爽哇大笑

这题就是字符串的模拟,注意细节就好

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int n,t;
struct cam
{ 
	char str[50]; //队名
	int score1; //得分
	int score2; //净胜球
	int score3; //进球
}list[50000];
int find(char ss[])  //查找字符串并返回下标
{
	int i;
	if(t==-1)
	{
		strcpy(list[0].str,ss);
		t=0;
		return t;
	}
    for(i=0;i<=t;i++)
	if(strcmp(list[i].str,ss)==0)
	return i;
	t++;
	strcpy(list[t].str,ss);
	return t;
}
int cmp(const void *a,const void *b)  //从大到小排序
{
	if((*(struct cam *)a).score1!=(*(struct cam *)b).score1)
    return (*(struct cam *)b).score1-(*(struct cam *)a).score1;
	if((*(struct cam *)a).score2!=(*(struct cam *)b).score2)
    return (*(struct cam *)b).score2-(*(struct cam *)a).score2;
    if((*(struct cam *)a).score3!=(*(struct cam *)b).score3)
    return (*(struct cam *)b).score3-(*(struct cam *)a).score3;
    return strcmp((*(struct cam *)a).str,(*(struct cam *)b).str);
}
int main()
{
	int i,k;
	char s1[50],s2[50],temp[10];
	int a,b;
	int p,q;
	while(scanf("%d",&n)!=EOF)
	{
		k=n*(n-1);
		t=-1;
		memset(list,0,sizeof(list));
		while(k--)
		{
			scanf("%s%s%s %d:%d",s1,temp,s2,&a,&b);
			p=find(s1);
			q=find(s2);
			if(a>b)    //得分
			list[p].score1+=3;
			else if(a==b)
			{
				list[p].score1+=1;
				list[q].score1+=1;
			}
			else
			list[q].score1+=3;
			list[p].score2+=(a-b);  //净胜球
			list[q].score2+=(b-a);
			list[p].score3+=a;  //进球
			list[q].score3+=b;
		}
		qsort(list,n,sizeof(struct cam),cmp);
		for(i=0;i<n;i++)
	    printf("%s %d\n",list[i].str,list[i].score1);
		printf("\n");
	}
	return 0;
}



			





posted on 2012-06-28 20:05  java课程设计例子  阅读(147)  评论(0编辑  收藏  举报