L1-043 阅览室 (20 分)

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

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

输入格式:

输入在第一行给出一个正整数N(≤),随后给出N天的纪录。每天的纪录由若干次借阅操作组成,每次操作占一行,格式为:

书号([1, 1000]内的整数) 键值SE) 发生时间hh:mm,其中hh是[0,23]内的整数,mm是[0, 59]内整数)

每一天的纪录保证按时间递增的顺序给出。

输出格式:

对每天的纪录,在一行中输出当天的读者借书次数和平均阅读时间(以分钟为单位的精确到个位的整数时间)。

输入样例:

3
1 S 08:10
2 S 08:35
1 E 10:00
2 E 13:16
0 S 17:00
0 S 17:00
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




 1 #include <bits/stdc++.h>
 2 const int N  =200;
 3 const int inf = 0x3f3f3f3f;
 4 #define ll long long 
 5 using namespace std;
 6 #define  P  pair<int,int>
 7 int n;
 8 set<int>se;
 9 int id;
10 int  h,m;
11 char ex;
12 map<int,P>mp;
13 int main()
14 {
15     se.clear();
16     scanf("%d",&n);
17 int  sum = 0;
18     int cnt =0,ret = 0;
19     while(cin>>id){
20     cin>>ex;
21     scanf("%02d:%02d",&h,&m);
22     if(id==0){
23         printf("%d ",cnt);
24         
25     //    printf("%dlll\n",sum);
26     if(cnt==0) printf("0\n");
27     else{
28     
29         double x = sum*1.0/cnt;
30         int y   =round(x);//不能直接输出round(x) 
31     printf("%d\n",y);
32 }
33 //printf("%.2f\n",x);
34         se.clear();
35         sum=0.0;
36         ret++;
37         cnt=0;
38         if(ret==n) break;
39     }
40     else     if(ex=='S') //不能未出现就插入:比如   E E 
41         {
42         se.insert(id);
43     //    printf("%d\n",se.size());
44         
45         
46             mp[id].first  = h;mp[id].second = m;
47             
48         
49         
50     }
51     else     if(ex=='E')         
52         {
53             //se.erase(id);
54             if(se.count(id)==1){//必须是还书而且之前被借过,才可以            
55         cnt++;
56         se.erase(id);//如果又有一个对应的E呢 
57     //    printf("%d\n",cnt);
58         P p  =mp[id];
59         int sum1=p.first*60+p.second;
60       //printf("sum1 %d\n",sum1);
61         sum+=((h*60+m)-sum1);
62     }
63         //printf("sum %d\n",sum);
64     }            
65     }
66     return 0;
67 }

 

posted on 2019-03-28 21:55  cltt  阅读(288)  评论(0编辑  收藏  举报

导航