1017 Queueing at Bank (25 分) (模拟 23/25
作者:互联网
/*
每个客户最多被服务1小时
给的小时 分钟 秒
超过17.00.01不被服务
提前来要等待
保留一位小数
*/
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+9;
struct node
{
int st,nex;
}t[N];
bool cmp(node a,node b){
return a.st<b.st;
}
priority_queue<int,vector<int>,greater<int>>p;
int main(){
int n,k;
cin>>n>>k;
int hour,minute,second,nex;
for(int i=1;i<=n;i++){
scanf("%d:%d:%d%d",&hour,&minute,&second,&nex);
int st=hour*3600+minute*60+second;
nex*=60;
t[i]={st,nex};
}
sort(t+1,t+1+n,cmp);
// p.push(8*3600);
// p.push(8*3600);
// p.push(8*3600);
for(int i=1;i<=k;i++){//卡了很久 这里不应该
p.push(8*3600);
}
int ans=0,tot=0;
for(int i=1;i<=n;i++){
int st=t[i].st,nex=t[i].nex;
if(nex>3600)nex=3600;
if(st>17*3600)break;
int now=p.top();
tot++;
p.pop();
if(now>st){
ans+=now-st;
p.push(now+nex);
}
else {
p.push(st+nex);
}
}
// cout<<ans<<endl;
if(ans==0)cout<<"0.0"<<endl;
else printf("%.01lf",ans/60.0/tot);
}
标签:25,3600,23,int,Queueing,st,nex,push,now 来源: https://blog.csdn.net/Minelois/article/details/122783766