10194 - Football (aka Soccer)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

struct Teams
{
	char name[35];
	int a_rank,
		b_point,
		c_games,
		d_wins,
		e_ties,
		f_losses,
		g_dif,
		h_sco,
		i_aga;
}teams[35];
int n,t,g;
char tournament[110],line[110];

int getNamePos(char *name)
{
	for(int i=0;i<t;i++)
	{
		if(strcmp(name,teams[i].name)==0)
			return i;
	}
	return -1;
}

void deal(char *name1,char *name2,int goal1,int goal2)
{
	int pos1,pos2;
	pos1=getNamePos(name1);
	pos2=getNamePos(name2);
	teams[pos1].c_games++;
	teams[pos2].c_games++;
	teams[pos1].h_sco+=goal1;
	teams[pos2].h_sco+=goal2;
	teams[pos1].i_aga+=goal2;
	teams[pos2].i_aga+=goal1;
	if(goal1>goal2)
	{
		teams[pos1].d_wins++;
		teams[pos2].f_losses++;
	}
	else if(goal1<goal2)
	{
		teams[pos2].d_wins++;
		teams[pos1].f_losses++;
	}
	else
	{
		teams[pos1].e_ties++;
		teams[pos2].e_ties++;
	}
}

int cmp(const void *a,const void *b)
{
	Teams team1=*(Teams *)a,team2=*(Teams *)b;
	if(team1.b_point!=team2.b_point)
		return team1.b_point<team2.b_point;
	else if(team1.d_wins!=team2.d_wins)
		return team1.d_wins<team2.d_wins;//细节决定成败,WA时,要首先检查一下自己的程序
	else if(team1.g_dif!=team2.g_dif)
		return team1.g_dif<team2.g_dif;
	else if(team1.h_sco!=team2.h_sco)
		return team1.h_sco<team2.h_sco;
	else if(team1.c_games!=team2.c_games)
		return team1.c_games>team2.c_games;
	else 
	{
		char f1[35];
		char f2[35];
		int i;
		for(i=0;i<=strlen(team1.name);i++)
			f1[i]=tolower(team1.name[i]);
		for(i=0;i<=strlen(team2.name);i++)
			f2[i]=tolower(team2.name[i]);
		return strcmp(f1,f2);
	}
	return false;
}

int main()
{
	/*
	freopen("10194.in","r",stdin);
	freopen("10194.out","w",stdout);
	//*/
	scanf("%d\n",&n);
	while(n--)
	{
		memset(teams,0,sizeof(teams));
		gets(tournament);
		scanf("%d\n",&t);
		for(int i=0;i<t;i++)
			gets(teams[i].name);
		scanf("%d\n",&g);
		//printf("%d%d%d",n,t,g);
		for(int i=0;i<g;i++)
		{
			gets(line);
			int len=strlen(line);
			char name1[35],name2[35];
			int goal1=0,goal2=0;
			int len1=0,len2=0;
			int flag=0;
			for(int j=0;j<len;j++)
			{
				if(line[j]=='#' || line[j]=='@')
					flag++;
				else 
				{
					switch(flag)
					{
					case 0:
						name1[len1++]=line[j];
						break;
					case 1:
						goal1=goal1*10+line[j]-'0';
						break;
					case 2:
						goal2=goal2*10+line[j]-'0';
						break;
					case 3:
						name2[len2++]=line[j];
						break;
					default:
						break;
					}
				}
			}
			name1[len1]='\0';
			name2[len2]='\0';
			deal(name1,name2,goal1,goal2);
		}
		for(int i=0;i<t;i++)
		{
			teams[i].b_point=3*teams[i].d_wins+1*teams[i].e_ties;
			teams[i].g_dif=teams[i].h_sco-teams[i].i_aga;
		}
		qsort(teams,t,sizeof(teams[0]),cmp);//往后看,与C++中的sort()的效果正好相反
		printf("%s\n",tournament);
		for(int i=0;i<t;i++)
			printf("%d) %s %dp, %dg (%d-%d-%d), %dgd (%d-%d)\n",
			i+1,teams[i].name,teams[i].b_point,teams[i].c_games,
			teams[i].d_wins,teams[i].e_ties,teams[i].f_losses,
			teams[i].g_dif,teams[i].h_sco,teams[i].i_aga);
		if(n!=0)
			printf("\n");
	}
	return 0;
}


你可能感兴趣的:(10194 - Football (aka Soccer))