其他分享
首页 > 其他分享> > 1017 Queueing at Bank (25 分) (模拟 23/25

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