忘了time是关键字, 懒得改了,define一下。
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
#define time asdfa
struct time {
int hh, mm, ss;
time() {};
time(int h, int m, int s):hh(h), mm(m), ss(s) {}
friend bool operator<(const time &a, const time &b) {
if (a.hh == b.hh) {
if (a.mm == b.mm)
return a.ss < b.ss;
else
return a.mm < b.mm;
}else
return a.hh < b.hh;
}
friend time operator+(const time &a, const int &b) {
time sum = a;
sum.hh += b / 60;
sum.mm += b % 60;
sum.hh += sum.mm / 60;
sum.mm %= 60;
return sum;
}
friend double operator-(const time &a, const time &b) {
double ans = a.ss - b.ss;
ans /= 60;
ans += a.mm - b.mm;
ans += 60 * (a.hh - b.hh);
return ans;
}
};
struct node {
time tm;
int lg;
node() {};
node(int h, int m, int s, int l):tm(h, m, s), lg(l) {}
friend bool operator<(const node &a, const node &b) {
return a.tm < b.tm;
}
};
struct cmp {
bool operator()(const time &a, const time &b) const {
return b < a;
}
};
priority_queue<time, vector<time>, cmp> wd;
node cus[10010];
int main() {
int n, k;
scanf("%d%d", &n, &k);
for (int i = 0; i < n; i++)
scanf("%d:%d:%d %d", &cus[i].tm.hh, &cus[i].tm.mm, &cus[i].tm.ss, &cus[i].lg);
sort(cus, cus+n);
while (k--)
wd.push(time(8,0,0));
double ans = 0;
int i = 0;
for (; i < n && cus[i].tm < time(17,0,1); i++) {
time t = wd.top();
wd.pop();
if (cus[i].tm < t) {
ans += t - cus[i].tm;
wd.push(t + cus[i].lg);
} else
wd.push(cus[i].tm + cus[i].lg);
}
printf("%.1f\n", ans/i);
return 0;
}