L1-43阅览室

题意:

输入:

 按照题意的意思:只有S,没有对应E的,直接不考虑;那么体现在代码中就是,在对于输入符号为E时,若当前符号,被访问过,存储了值,那么才加到总时间长t中。

对于只有E,没有S的,因为没有被访问过,自动不会被计算,前面已经涉及了。

但是对于一本书,只能被一个读者借阅,测试点却给了,一个书被多次借的情况。

一个书被多次借,按照最后一次被借为结束。直接覆盖即可,不需额外考虑。

一个书被多次还,按照第一个为准,还了以后立马置零,表示没访问过。

本来我是打算直接用a[i]里面是否有值来判断是否被访问过的,不想开标记数组,但是如果借的时间00:00,a[i]还是0,但是被借了,要测边界数据。

 其实也不算题目坑人,只要别想那么多,就不想着这种情况,照样可以过的。

只需要注意,还了以后,立马把数组恢复即可。

#include <iostream>
#include <vector>
#include <cmath>
#include <map>
#include <algorithm>
#include <set>
#define  first x
#define  second y
using namespace std;
typedef pair<int,int> pii;
const int N=1e3+10;
int a[N],p[N];
int n,f;
int main(){
     cin>>n;  
     int num=0;
     int t=0;
     int i;char c; int h,m;
     while(1){
     	scanf("%d %c %d:%d",&i,&c,&h,&m);
     if(c=='S' && i!=0) a[i]=h*60+m,p[i]=1;
     if(c=='E' && p[i]){
     	num++;
     	t+=(h*60+m-a[i]);
     	p[i]=0;
	 }
     if(i==0){
        if(t==0) cout<<"0 0"<<endl;
        else cout<<num<<' '<<(int)(1.0*t/num+0.5)<<endl;
     	num=0,t=0;
     	f++;
	  }
     if(f==n) break;
	}
   return 0;
}       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值