有三组数据过不了,暂记于此
#include<iostream>
#include<vector>
#include<queue>
#include<algorithm>
#include<string.h>
using namespace std;
struct node{
int h;
int m;
int s;
int wait;
int end;
int process;
double total;
};
struct record{
int win; //窗口号
float endTime;
record(){win = -1; endTime = 28800.0;}
};
bool cmp(node a,node b)
{
return a.total < b.total;
}
bool cmp2(record a,record b)
{
return a.endTime < b.endTime;
}
int main()
{
int cousNum; //顾客数
int winNum; //窗口数
cin>>cousNum>>winNum;
int i;
node t;
vector<node> vec;
for(i=0; i<cousNum; i++){
scanf("%d:%d:%d %d",&t.h,&t.m,&t.s,&t.process);
t.total = t.h*3600 + t.m*60 + t.s;
vec.push_back(t);
}
/* cout<<endl;
for(i=0; i<vec.size(); i++)
{
printf("%d %d %d %d",vec[i].h,vec[i].m,vec[i].s,vec[i].process,vec[i].total);
cout<<endl;
}*/
sort(vec.begin(),vec.end(),cmp);
vector<record> rec(winNum);
queue<node> *que = new queue<node>[winNum];
int winBusy = 0;//正在办理业务的窗口数
int j;
double sum = 0.0;
int count = 0;
for(i=0; i<cousNum; i++)
{
if(vec[i].total > 17*3600 )
{
count++;
continue;
}
sort(rec.begin(),rec.end(),cmp2); //找出空闲窗口
vec[i].wait =rec[0].endTime - vec[i].total;
if(vec[i].wait <= 0)
vec[i].wait = 0; //无需等待
rec[0].endTime += vec[i].process*60;
//cout<<"vec["<<i<<"]:"<<vec[i].h<<" "<<vec[i].m<<" "<<vec[i].s<<" "<<vec[i].process<<" "<<vec[i].wait<<endl;
sum += vec[i].wait;
}
printf("%.1lf\n",sum/(cousNum-count)/60.0);
return 0;
}