#include<bits/stdc++.h>
#define inf 999999999
using namespace std;
int n,k;
struct nod{
int ftime; //每一个柜台的空闲时间
}gt[105];
struct node{
int start; //到来时间
int time; //持续时间
int wait; //等待时间
}co[10005];
bool comp(node a,node b)
{
return a.start<b.start;
}
int main()
{
cin>>n>>k;
int h,m,s,p,cnt=0;
for(int i=0;i<n;i++)
{
scanf("%d:%d:%d%d",&h,&m,&s,&p);
int tt=h*3600+m*60+s;
if(tt>=17*3600)
continue;
if(p>60)
p=60;
co[cnt].start=tt; //只记录在上班时间内来的顾客,超过点的不记
co[cnt].time=p*60;
cnt++;
}
for(int i=1;i<=k;i++)
gt[i].ftime=8*3600;
sort(co,co+cnt,comp);
for(int i=0;i<cnt;i++)
{
int minn=inf,u;
for(int j=1;j<=k;j++)
{
if(gt[j].ftime<minn) //每次找最先空闲的柜台
{
minn=gt[j].ftime;
u=j;
}
}
if(co[i].start<gt[u].ftime) //需等待
{
co[i].wait=gt[u].ftime-co[i].start;
gt[u].ftime+=co[i].time;
}
else //无需等待
{
co[i].wait=0;
gt[u].ftime=co[i].start+co[i].time;
}
}
int sum=0;
for(int i=0;i<cnt;i++)
sum+=co[i].wait;
printf("%.1f\n",sum*1.0/60/cnt);
return 0;
}
PAT (Advanced Level) Practice 1017 Queueing at Bank (25分)
最新推荐文章于 2024-03-19 14:45:32 发布