PAT 1017. Queueing at Bank (25)
阿新 • • 發佈:2019-02-06
// //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; }