hautoj 1260

xiaoxiao2021-02-27  289

时间限制: 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; }

转载请注明原文地址: https://www.6miu.com/read-7357.html

最新回复(0)