题18.天梯赛训练-L1-043 阅览室 (20 分)
一、题目
二、题解
本题的关键在于借书次数增加以及借书时长生成需要有借(flag置为1)有还(flag置为0),以及注意aver的四舍五入(aver=(float)sum/n+0.5)。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int N;
int d=1;
int i,n,num,sum;
int h,mi;
float aver;
char key;
cin>>N;
while(d<=N)
{
n=0;
sum=0;
map<int,int> flag;
map<int,int> s,e;
cin>>num>>key;
scanf("%d:%d",&h,&mi);
while(num!=0)
{
if(key=='E'&&flag[num]==1)
{
e[num]=(h*60)+mi;
sum+=e[num]-s[num];
flag[num]=0;
n++;
}
if(key=='S')//这个地方我先前写的是附加了条件flag[num]==0表示记录的是第一次输入S的数据,因为我觉得按照题目意思--从管理员按下S开始计时,应该是这样,但是测试点1错了,于是改成了这个,也就是从输入了一堆S的最后一个来记,但是我还是想不明白。。。
{
s[num]=(h*60)+mi;
flag[num]=1;
}
cin>>num>>key;
scanf("%d:%d",&h,&mi);
}
if(n!=0)
{
aver=(float)sum/n+0.5;
printf("%d %d\n",n,(int)aver);
}
else
{
cout<<"0 0"<<endl;
}
d++;
}
}