#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
using namespace std;
struct customer
{
int arrivetime;
int starttime;
int endtime;
int lasttime;
int waittime;
}c[10010];
struct line
{
int index;
int endtime;
line()
{
endtime=8*3600;
}
}l[110];
int N,K;
int opentime=8*3600;
int closetime=17*3600;
bool cmp1(customer a,customer b)
{
return a.arrivetime<b.arrivetime;
}
bool cmp2(line a,line b)
{
if(a.endtime!=b.endtime)return a.endtime<b.endtime;
else return a.index<b.index;
}
void allot(customer &a,line &l)
{
a.starttime=max(a.arrivetime,l.endtime);
l.endtime=a.starttime+min(a.lasttime,60)*60;
a.endtime=l.endtime;
a.waittime=a.starttime-a.arrivetime;
}
int main()
{
scanf("%d%d",&N,&K);
int h,m,s;
for(int i=0;i<N;i++)
{
scanf("%d:%d:%d %d",&h,&m,&s,&c[i].lasttime);
c[i].arrivetime=h*3600+m*60+s;
}
for(int i=0;i<K;i++)
{
l[i].index=i;
}
sort(c,c+N,cmp1);
int total=0;
int num=0;
for(int i=0;i<N;i++)
{
sort(l,l+K,cmp2);
allot(c[i],l[0]);
if(c[i].arrivetime<=closetime)
{
num++;
total+=c[i].waittime;
}
else break;
}
printf("%.1f",total*1.0/num/60);
return 0;
}
PAT甲1017 Queueing at Bank (25)(25 分)
最新推荐文章于 2022-12-01 11:01:31 发布