//
//1017. Queueing at Bank (25)
// accept
#include <iostream>
#include <algorithm>
using namespace std;
typedef struct
{
int second;
int time;
}Record;
bool cmp(Record r1, Record r2)
{
if (r1.second == r2.second)
{
return r1.time < r2.time;
}
return r1.second < r2.second;
}
int main()
{
int n;
int k;
Record r[10005];
cin >> n >> k;
int waitingtime = 0;
int curr[105];
int len = n;
int i;
int h, m, s;
int index = 0;
for (i = 0;i<n;i++)
{
scanf("%d:%d:%d %d", &h, &m, &s, &r[index].time);
r[index].second = h * 60 * 60 + m * 60 + s;
if (r[index].second > 61200)
{
index--;
len--;
}
index++;
}
fill(curr, curr+k, 8*60*60);
sort(r, r+len, cmp);
int start = 0;
for (i = start; i< start + k && i< len; i++ )
{
if (r[i].second < curr[i - start])
{
waitingtime += curr[ i- start ] - r[i].second;
curr[i - start] = curr[i-start] + (r[i].time * 60) ;
}
else
{
curr[i-start] = r[i].second + (r[i].time * 60);
}
}
i+=start;
sort(curr, curr+k);
while( i < len)
{
if (r[i].second < curr[0])
{
waitingtime += curr[0] - r[i].second;
curr[0] = curr[0] + (r[i].time * 60) ;
}
else
{
curr[0] = r[i].second + (r[i].time * 60);
}
sort(curr, curr+k);
i++;
}
printf("%.1f", waitingtime / len / 60.0);
return 0;
}
PAT 1017. Queueing at Bank (25)
最新推荐文章于 2016-03-08 11:18:48 发布