|vis数组四舍五入时间差|L1-3 阅览室 (20分)

//当读者借书时,管理员输入书号并按下S键,程序开始计时;
//当读者还书时,管理员输入书号并按下E键,程序结束计时。
//书号为不超过1000的正整数。
//当管理员将0作为书号输入时,表示一天工作结束,
    //你的程序应输出当天的读者借书次数和平均阅读时间

// 注意:由于线路偶尔会有故障,可能出现不完整的纪录,
// 即只有S没有E,或者只有E没有S的纪录,系统应能自动忽略这种无效纪录。
// 另外,题目保证书号是书的唯一标识,同一本书在任何时间区间内只可能被一位读者借阅。

// 输入在第一行给出一个正整数N(≤10),
// 随后给出N天的纪录。
// 每天的纪录由若干次借阅操作组成,
// 每次操作占一行,格式为:
// 书号([1, 1000]内的整数) 键值(S或E) 发生时间(hh:mm,其中hh是[0,23]内的整数,mm是[0, 59]内整数)
// 每一天的纪录保证按时间递增的顺序给出。

//对每天的纪录,在一行中输出当天的读者借书次数和平均阅读时间(以分钟为单位的精确到个位的整数时间)。
// 3
///1
// 1 S 08:10
// 2 S 08:35
// 1 E 10:00
// 2 E 13:16
// 0 S 17:00
///2
// 0 S 17:00
///3
// 3 E 08:10
// 1 S 08:20
// 2 S 09:00
// 1 E 09:20
// 0 E 17:00
=====================
// 2 196
// 0 0
// 1 60










//当管理员将0作为书号输入时,表示一天工作结束,你的程序应输出当天的读者借书次数和平均阅读时间。
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
int main(){
    
    
    int n;
    cin>>n;
    int id,hh,mm,beginSum[1010];
    char flag;
    int vis[1010]={
    
    0};
    for(int i=0;i<n;i++){
    
    
        int cnt=0,TotalSum=0;
        while(scanf("%d %c %d:%d",&id,&flag,&hh,&mm)!=EOF&&id!=0){
    
    
                if(flag=='S'){
    
    
                    vis[id]=1;
                    beginSum[id]=hh*60+mm;
                }else if(flag=='E'&&vis[id]==1){
    
    
                    TotalSum+=hh*60+mm-beginSum[id];  
                    cnt++;
                    vis[id]=0;
                }
        }
        if(cnt==0)
            cout<<"0 0\n";
        else{
    
    
            printf("%d %d\n",cnt,(int)(TotalSum*1.0/cnt+0.5));
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44769957/article/details/108939297