UVa 10258 Contest Scoreboard

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

typedef struct team
{
    int id;
    int ac;
    int time;
    int vis;
    int acid[11];
    int penalty[11];
} Team;

int cmp(const void *a,const void *b)
{  
    Team *x = (Team *)a;  
    Team *y = (Team *)b;  
    if(x->vis == y->vis)  
    { 
        if(x->ac == y->ac)  
            return x->time - y->time;  
        return y->ac - x->ac;  
    }  
    return y->vis - x->vis;  
}  

int main()
{
	int cases;
	Team teams[101];
    int id, pid, time;
	char status;
    char strtemp[30];
    int i,j,n;
 	
    scanf("%d\n\n", &cases);
    while (cases--) 
    {
    	for(i=1; i<=100; i++)
        {  
            teams[i].id=i;  
            teams[i].ac=0;  
            teams[i].time=0;  
            teams[i].vis=0;  
            for(j=0; j<=10; j++)  
            {  
                teams[i].acid[j]=0;  
                teams[i].penalty[j]=0;  
            }  
        } 
		n = 0;
        while(gets(strtemp)!=NULL)  
        {  
            if(strlen(strtemp)<2)	break;
            sscanf(strtemp,"%d %d %d %c", &id, &pid, &time, &status);  
            teams[id].vis = 1;  
            if(!teams[id].acid[pid] && status=='C')  
            { 
                teams[id].acid[pid] = 1;  
                teams[id].penalty[pid] += time;  
            }  
            if(!teams[id].acid[pid] && status=='I')
                teams[id].penalty[pid] += 20;  
            n++;  
        }  
        for(i=1; i<=100; i++)  
        {  
            for(j=1; j<10; j++)  
            {  
                if(teams[i].acid[j])  
                {  
                    teams[i].ac++;  
                    teams[i].time += teams[i].penalty[j];  
                }  
            }  
        }  
        qsort(teams+1, 100, sizeof(teams[0]), cmp);  
        for(i=1; i<=100; i++)  
        {  
            if(!teams[i].vis)	continue;  
            printf("%d %d %d\n",teams[i].id, teams[i].ac, teams[i].time);
        }  

        if(cases > 0) printf("\n");
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值