#include <stdio.h>
#include <stdlib.h>
typedef struct pai
{
int t1;
int t2;
} pai;
pai p[10002];
int cmp(pai *p1,pai *p2){
if(p1->t1>p2->t1) return 1;
else return -1;
}
int main()
{
int n,k;
scanf("%d%d",&n,&k);
int i,j;
int a,b,c,d;
for(i=0; i<n; i++)
{
scanf("%d:%d:%d %d",&a,&b,&c,&d);
p[i].t1=a*3600+b*60+c;
p[i].t2=d*60;
}
qsort(p,n,sizeof(pai),cmp);
int wait[10002]={0};
int serve[k];//记录窗口中的人的编号
for(i=0;i<k;i++) serve[i]=-1;
int now_wait=0;
for(i=0;i<n;i++){
if(p[i].t1<28800){
wait[i]=28800-p[i].t1;
p[i].t1=28800;
}
}
p[n].t1=9999999;
for(i=28800;p[now_wait].t1<=61200;i++){//直到所有17:00前来的人被服务完
for(j=0;j<k;j++){
if(serve[j]==-1){//有空缺窗口,让人进来,并记录他的等待时间
if(p[now_wait].t1<=i){//如果他已经来了
serve[j]=now_wait;
wait[now_wait]+=i-p[now_wait].t1;
//printf("wait[%d]=%d\n",now_wait,wait[now_wait]);
now_wait++;
}
}
}
for(j=0;j<k;j++){//窗口中的时间减一
p[serve[j]].t2--;
if(p[serve[j]].t2==0) serve[j]=-1;
}
}
//printf("%d\n",now_wait);
float sum=0;
for(i=0;i<n;i++){
sum+=wait[i];
}
sum=sum/60;
sum=sum/now_wait;
printf("%.1f",sum);
return 0;
}
02-29
1342

10-12
314
