分析:这次的银行队列模拟简单了很多,常规操作
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 1e4+10;
typedef struct Cus{
int h, m, s, time, serv;
}Cus;
Cus cus[maxn];
int win[110];
bool cmp(Cus a, Cus b){
return a.time < b.time;
}
int main(){
//freopen("aa.txt", "r", stdin);
int n, k, endtime = 17*3600, sum = 0, cnt = 0;
scanf("%d %d", &n, &k);
for(int i = 0; i<n; i++){
scanf("%d:%d:%d %d", &cus[i].h, &cus[i].m, &cus[i].s, &cus[i].serv);
cus[i].time = cus[i].h*3600+cus[i].m*60+cus[i].s;
}
sort(cus, cus+n, cmp);
for(int i = 0; i<k; i++){
win[i] = 8*3600;
}
for(int i = 0; i<n; ++i){
if(cus[i].time > endtime) break;
int minn = win[0], idx = 0;
for(int j = 1; j<k; j++)
if(win[j] < minn)
minn = win[idx = j];
if(win[idx] > cus[i].time)
sum += win[idx]-cus[i].time;
else win[idx] = cus[i].time;
win[idx] += cus[i].serv*60;
cnt++;
}
printf("%.1f", sum*1.0/(60*cnt));
return 0;
}