#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<math.h>
#include<string.h>
#define LOCAL
typedef struct team{
char Name[40];
int Game;
int TotalPoint;
int result[3];
int GoalScored;
int GoalAgainst;
team()
{
memset(Name,0,sizeof(Name));
Game=0;TotalPoint=0;
memset(result,0,sizeof(result));
GoalScored=0;
GoalAgainst=0;
}
}Team;
int cmp_string(const void *_a,const void *_b)
{
char *a=(char *)_a;
char *b=(char *)_b;
return strcmp(a,b);
}
int cmp_team(const void *_a,const void *_b)
{
Team *a=(Team *)_a;
Team *b=(Team *)_b;
int ad=a->GoalScored-a->GoalAgainst;
int bd=b->GoalScored-b->GoalAgainst;
if(a->TotalPoint!=b->TotalPoint) return b->TotalPoint-a->TotalPoint;//most points earned
else if(a->result[0]!=b->result[0]) return b->result[0]-a->result[0];//most wins
else if(ad!=bd)return bd-ad;//most goal difference
else if(a->GoalScored!=b->GoalScored)return b->GoalScored-a->GoalScored;//most goals scored
else if(a->Game!=b->Game)return a->Game-b->Game;//less games played
else return strcasecmp(a->Name,b->Name);//lexicographic order
return false;
}
int GetTeamName(int n,Team a[])
{
int i;
char name[40][40];
for(i=0;i<n;i++)
{
gets(name[i]);
}
qsort(name,n,sizeof(name[0]),cmp_string);
for(i=0;i<n;i++)
{
strcpy(a[i].Name,name[i]);
}
return 0;
}
int SearchSave(const char ta[],const char tb[],int pa,int pb,Team a[],const int T)
{
int i,j,k;
for(i=0;i<T;i++)
{
if(strcmp(ta,a[i].Name)==0)
{
a[i].Game++;
a[i].GoalAgainst+=pb;
a[i].GoalScored+=pa;
if(pa>pb)
{
a[i].result[0]++;
a[i].TotalPoint+=3;
}
if(pa==pb)
{
a[i].result[1]++;
a[i].TotalPoint++;
}
if(pa<pb)a[i].result[2]++;
}
if(strcmp(tb,a[i].Name)==0)
{
a[i].Game++;
a[i].GoalAgainst+=pa;
a[i].GoalScored+=pb;
if(pb>pa)
{
a[i].result[0]++;
a[i].TotalPoint+=3;
}
if(pa==pb)
{
a[i].result[1]++;
a[i].TotalPoint++;
}
if(pb<pa)a[i].result[2]++;
}
}
return 0;
}
int InputTour(Team a[],const int T)
{
char teamA[40],teamB[40],aux[5],c[1000];
int pA,pB,i=0,j=0,k=0,ta=0,tb=0,ax=0;
gets(c);
memset(aux,'\0',sizeof(aux));
for(i=0;i<strlen(c);i++)
{
if(c[i]!='#')teamA[ta++]=c[i];
if(c[i]=='#') break;
}
teamA[ta]='\0';
for(j=i;j<strlen(c);j++)
{
if(isdigit(c[j]))aux[ax++]=c[j];
if(c[j]=='@')break;
}
pA=atoi(aux);
memset(aux,'\0',sizeof(aux));
ax=0;
for(i=j;i<strlen(c);i++)
{
if(isdigit(c[i]))aux[ax++]=c[i];
if(c[i]=='#')break;
}
pB=atoi(aux);
for(j=i+1;j<strlen(c);j++)
{
teamB[tb++]=c[j];
}
teamB[tb]='\0';
SearchSave(teamA,teamB,pA,pB,a,T);
return 0;
}
int TeamStanding(Team a[],const int T,int stand[])
{
qsort(a,T,sizeof(a[0]),cmp_team);
return 0;
}
int Output(Team a[],const int T)
{
for(int i=0;i<T;i++)
{
printf("%d) %s %dp, %dg (%d-%d-%d), %dgd (%d-%d)\n",i+1,a[i].Name,a[i].TotalPoint,a[i].Game,a[i].result[0],a[i].result[1],a[i].result[2],\
a[i].GoalScored-a[i].GoalAgainst,a[i].GoalScored,a[i].GoalAgainst);
}
return 0;
}
int main()
{
#ifdef LOCAL
freopen("10194in.txt","r",stdin);
freopen("10194out.txt","w",stdout);
#endif
int N,T,G,stand[40];
scanf("%d",&N);
getchar();
char TourName[110];
for(int i=0;i<N;i++)
{
Team all[40];
gets(TourName);
scanf("%d",&T);
getchar();
GetTeamName(T,all);
scanf("%d",&G);
getchar();
for(int j=0;j<G;j++)
{
InputTour(all,T);
}
TeamStanding(all,T,stand);
puts(TourName);
Output(all,T);
if(i<N-1)printf("\n");
}
return 0;
}
UVA - 10194 - Football (aka Soccer)
最新推荐文章于 2019-02-20 08:47:56 发布