UVA - 10194 - Football (aka Soccer)

#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;
}            


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值