hautoj 1260

来源:互联网 发布:2016淘宝热销产品 编辑:程序博客网 时间:2024/06/05 06:58


时间限制: 1  内存限制: 64 MB
提交: 363  解决: 116
提交 状态 

题目描述

饶学妹组织了一场ACM赛制的比赛,大家纷纷慕名来参加。比赛中大家交题只会有两种结果:AC,WA。比赛结束了,饶学妹制作榜单啦。首先按AC题目的数目(重复AC一道题只算一次)从多到少排名;AC题目数目相同的同学按罚时(罚时计算方式为:单题罚时 = (首次AC该题目时间 + 首次AC之前WA的次数 * 20)min,总罚时 = 各题罚时之和;即某题目AC之后,对这道题目后续的提交均不计入罚时)从少到多排列;AC数目相同且罚时也相同的同学,按编号从小往大排序。

输入

 

第一行为n,m,k(1≤n≤1000,1≤m≤10000,1≤k≤10),分别表示参加比赛的人数、提交总次数和总题数。
之后一行为n个用空格分隔的字符串,表示n位参赛选手的姓名(每个字符串长度均不超过20,且仅含小写字母);
之后m行,每行均为 Timei IDi PIDi Resulti,(1≤Timei≤Timei+1≤300,1≤IDi≤n,1≤PIDi≤k,Resulti="AC"/"WA"),表示编号为IDi的选手在Timei时刻提交了编号为PIDi的题目,且结果为Resulti.

 

输出

输出n行,按排名从高到低排列。每行分别输出该选手的姓名,过题数,总罚时,中间均为一个空格间隔。

样例输入

5 11 10

phx lsf zk rqy ch

1 1 1 AC

1 1 2 AC

2 1 3 AC

2 1 4 AC

3 2 2 WA

4 2 2 AC

5 3 2 AC

10 5 1 WA

20 5 2 WA

30 5 3 WA

40 5 4 WA

样例输出

phx 4 6

zk 1 5

lsf 1 24

rqy 0 0

ch 0 0

 

题目来源:http://218.28.220.249:50015/JudgeOnline/problem.php?id=1260

题意概括:

给你n个同学的在oj上的做题情况,根据题数,罚时排序。

解题思路:

         把这m次提交情况都放入一个结构体内,然后计算每个人做对每题的用时和罚时之和,和做题数量,然后写三个循环排序,分别按照做题数目,时间,学号排序。

错误分析:

         对那些开始做错最后又AC的题的罚时应该每题分开加,当时少些了一点把所有罚时加一起了。

代码;

#include<stdio.h>
#include<string.h>
struct p
{
    int time;
    int name;
    int tm;
    char s[50];
};
int main()
{
    struct p a[10100],t;
    int i,j,k,l,y,u,v,m,n,f[10100],b[1010][101],tt[10100],sum[10100],sum2[1010][50];
    char nn[10100][50],c;
    while(scanf("%d%d%d",&n,&m,&k)!=EOF)
    {
        memset(b,0,sizeof(b));
        memset(f,0,sizeof(f));
        memset(tt,0,sizeof(tt));
        memset(sum,0,sizeof(sum));
        memset(sum2,0,sizeof(sum2));
        for(i=1;i<=n;i++)
        {
            scanf("%s",nn[i]);
            f[i]=i;
        }
        for(i=0;i<m;i++)
        {
            scanf("%d%d%d",&a[i].time,&a[i].name,&a[i].tm);
            scanf("%s",a[i].s);
        }
        /*for(i=0;i<m;i++)
        {
            printf("%d %d %d",a[i].time,a[i].name,a[i].tm);
            printf("%s\n",a[i].s);
        }*/
        
        for(i=0;i<m;i++)
        {
            for(j=1;j<=n;j++)
            {
                if(a[i].name==j&&b[j][a[i].tm]==0&&a[i].s[0]=='A')
                {
                    sum[j]+=a[i].time+sum2[j][a[i].tm];
                    b[j][a[i].tm]=1;
                    tt[j]++;
                }
                if(a[i].name==j&&b[j][a[i].tm]==0&&a[i].s[0]=='W')
                {
                    sum2[j][a[i].tm]+=20;
                    
                }
                
            }
        }
    
        for(i=1;i<=n-1;i++)
        {
            for(j=1;j<=n-i;j++)
            {
                if(tt[j]<tt[j+1])
                {
                    y=tt[j];tt[j]=tt[j+1];tt[j+1]=y;
                    u=sum[j];sum[j]=sum[j+1];sum[j+1]=u;
                    v=f[j];f[j]=f[j+1];f[j+1]=v;
                    
                }
            }
        }
        /*for(i=1;i<=n;i++)
        {
            printf("%s",nn[f[i]]);
            printf(" %d %d\n",tt[i],sum[i]);
        }
        printf("-----------");*/
        y=0;u=0;v=0;
        for(i=1;i<=n-1;i++)
        {
            for(j=1;j<=n-i;j++)
            {
                if(tt[j]==tt[j+1]&&sum[j]>sum[j+1])
                
                {    
                    u=sum[j];sum[j]=sum[j+1];sum[j+1]=u;
                    y=tt[j];tt[j]=tt[j+1];tt[j+1]=y;
                    
                    v=f[j];f[j]=f[j+1];f[j+1]=v;
                }
            }
        }
        /*for(i=1;i<=n;i++)
        {
            printf("%s",nn[f[i]]);
            printf(" %d %d\n",tt[i],sum[i]);
        }printf("-----------");    */
        y=0;u=0;v=0;
        for(i=1;i<=n-1;i++)
        {
            for(j=1;j<=n-i;j++)
            {
                if(tt[j]==tt[j+1]&&sum[j]==sum[j+1]&&f[j]>f[j+1])
                {
                    y=tt[j];tt[j]=tt[j+1];tt[j+1]=y;
                    u=sum[j];sum[j]=sum[j+1];sum[j+1]=u;
                    v=f[j];f[j]=f[j+1];f[j+1]=v;
                }
            }
        }
        for(i=1;i<=n;i++)
        {
            printf("%s",nn[f[i]]);
            printf(" %d %d\n",tt[i],sum[i]);
        }
        
        
    }
    
    return 0;
}


0 0
原创粉丝点击