作为一个ACMer,总是习惯于在比赛中或比赛结束后查看自己的排名(Standing),有细心的同学发现Penalty(罚时),在相同做题数下Penalty越小越好(真是个令人振奋的发现)。让我们看看Penatly的计算方法:每道试题用时将从竞赛开始到试题解答被判定为正确(AC)为止,其间每一次提交运行结果被判错误的话将被加罚20分钟时间,未正确解答的试题不记时。例如:A、B两队都正确完成两道题目,其中A队提交这两题的时间分别是比赛开始后1:00和2:45,B队为1:20和2:00,但B队有一题提交了2次。这样A队的Penalty为1:00+2:45=3:45而B队为1:20+2:00+0:20=3:40,所以B队因Penalty少而获胜。当然如果你AC了某道题后,之后这一题所有提交的代码都不算罚时和时间(有时我也这么无聊~)。恰逢北化周一晚的周赛,在九楼机房18:00-22:00,考验随之而来——现在需要你计算大家的Penalty,Penalty初始为00:00,相信作为北化的ACMer相信你一定可以的!
输入
输入包含多组数据,每组数据的第一行包含一个正整数N(1=<N<=20)表示此ACMer的提交次数,接下来的第2到N+1行表示每次提交的状态,由三个字段组成,第一个字段为一个整数A,表示当前的时间:hour:minutes(保证18=<hour<=22,0<=minutes<=60),第二个字段为一个大写字母(A~Z),表示题号,第三个字段表示OJ返回的状态,假设只可能是AC,WA,RE,TLE中的一种,均为大写
输出
输出这位ACMer的Penalty,每个测试数据占一行
样例输入
3
18:05 A RE
19:11 A AC
20:00 B WA
1
20:27 F AC
样例输出
01:31
02:2
输入
输入包含多组数据,每组数据的第一行包含一个正整数N(1=<N<=20)表示此ACMer的提交次数,接下来的第2到N+1行表示每次提交的状态,由三个字段组成,第一个字段为一个整数A,表示当前的时间:hour:minutes(保证18=<hour<=22,0<=minutes<=60),第二个字段为一个大写字母(A~Z),表示题号,第三个字段表示OJ返回的状态,假设只可能是AC,WA,RE,TLE中的一种,均为大写
输出
输出这位ACMer的Penalty,每个测试数据占一行
样例输入
3
18:05 A RE
19:11 A AC
20:00 B WA
1
20:27 F AC
样例输出
01:31
02:2
#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
int main(){
char time[20][5],num[20],zhuangtai[20][3];
int n,m,hour1,visited,min1,i,n1,k,p,hour[20],min[20],visit[20],compare,compare1,compare2;
while(scanf("%d",&n)!=EOF){//输入时间数据个数
i=0;
visited=0;//判断该题出现AC时前面有没出现过
hour1=0;//最终小时
min1=0;//最终分钟
n1=n;//准备输入时间个数
k=0;//计算有效AC个数
while(n--){
scanf("%s %c %s",time[i],&num[i],zhuangtai[i]);
// printf("%s %c %s",time[i],num[i],zhuangtai[i]);
hour[i]=time[i][0]-48;
//printf("%d\n",hour[i]);
//cout<<time[i][0]<<endl;
hour[i]=10*hour[i]+(time[i][1]-48);
hour[i]-=18;
min[i]=time[i][3]-48;
min[i]=10*min[i]+(time[i][4]-48);
/// printf("%d %d\n",hour[i],min[i]);
compare=zhuangtai[i][0];
if(compare==65){//标记出AC所在的下标记录到一个数组中
//printf("%d\n",compare);
compare2=num[i];
// printf("%d\n",compare2);
for( m=0;m<k;m++){
compare1=num[visit[m]];
if(compare1==compare2)
visited++;
}
if(visited==0){
visit[k]=i;
k++;}
visited=0;
// printf("%d\n",visit[k]);
}
//printf("%d %d\n",hour[i],min[i]);
i++;
}//while
for(m=0;m<k;m++){
for(p=0;p<visit[m];p++){
if(num[p]==num[visit[m]] && p!=visit[m]){
min[visit[m]]+=20;
}
if(min[visit[m]] > 59){
hour[visit[m]]+=min[visit[m]]/60;
min[visit[m]]=min[visit[m]]%60;
}
} //for
}//forda
for(m=0;m<k;m++){
hour1+=hour[visit[m]];
min1+=min[visit[m]];
/* if(hour[visit[m]]<10)
printf("0");
printf("%d:",hour[visit[m]]);
if(min[visit[m]]<10)
printf("0");
printf("%d",min[visit[m]]);
printf("\n");*/
}
if(min1>59){
hour1+=min1/60;
min1=min1%60;
}
if(hour1<10)
printf("0");
printf("%d:",hour1);
if(min1<10)
printf("0");
printf("%d",min1);
printf("\n");
}//while总
return 0;
}