#include <stdio.h>
#include <stdlib.h>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <math.h>
#include <map>
#include <vector>
#include <queue>
using namespace std;
int N,K;
int open=0,close=60*9*60;
struct customer
{
int arrivetime;
int endtime;
int servetime;
}c[10010];
struct line
{
int endtime;
int id;
line()
{
endtime=open;
}
}l[110];
bool cmp(customer a,customer b)
{
return a.arrivetime<b.arrivetime;
}
bool cmp1(line a, line b)
{
if(a.endtime!=b.endtime)return a.endtime<b.endtime;
else return a.id<b.id;
}
int main()
{
scanf("%d%d",&N,&K);
for(int i=0;i<N;i++)
{
int h,m,s;
scanf("%d:%d:%d",&h,&m,&s);
int time=h*60*60+m*60+s;
c[i].arrivetime=time-8*60*60;
int temp;
scanf("%d",&temp);
c[i].servetime=temp*60;
}
sort(c,c+N,cmp);
int num;
for(num=0;num<K&&num<N;num++)
{
c[num].endtime=max(l[num].endtime,c[num].arrivetime)+c[num].servetime;
l[num].endtime=c[num].endtime;
l[num].id=num;
}
while(num<N)
{
sort(l,l+K,cmp1);
c[num].endtime=max(l[0].endtime,c[num].arrivetime)+c[num].servetime;
l[0].endtime=c[num].endtime;
num++;
}
double sum=0;
int count=0;
for(int i=0;i<N;i++)
{
if(c[i].arrivetime<close)
{
count++;
sum=sum+c[i].endtime-c[i].arrivetime-c[i].servetime;
}
}
sum=sum/(count*1.0)/60;
printf("%.1f\n",sum);
system("pause");
return 0;
}
PAT甲1017 Queueing at Bank (25)
猜你喜欢
转载自blog.csdn.net/yhy489275918/article/details/80455550
今日推荐
周排行