- 开始时间大于等于17:00的,“Sorry”,而不是结束时间大于17:00
#include <iostream>
#include <queue>
#include <string>
using namespace std;
struct NODE {
int window;
int leave_time;
NODE(int window, int leave_time): window(window), leave_time(leave_time) {}
};
bool operator < (const NODE& lhs, const NODE& rhs) {
return lhs.leave_time != rhs.leave_time ? lhs.leave_time > rhs.leave_time : lhs.window > rhs.window;
}
int main() {
cin.tie(NULL);
ios_base::sync_with_stdio(false);
int N, M, K, Q;
cin >> N >> M >> K >> Q;
vector<int> win(N);
vector<int> cus(K + 1);
for (int i = 1; i <= K; ++i) cin >> cus[i];
priority_queue<NODE> pq;
vector<bool> cannotBeServed(K + 1);
int k = 1;
while (k <= K && k <= N * M) {
int wd = (k - 1) % N;
if (win[wd] >= 540) cannotBeServed[k] = true;
win[wd] = cus[k] = cus[k] + win[wd];
pq.emplace(wd, win[wd]);
++k;
}
while (k <= K) {
int wd = pq.top().window;
pq.pop();
if (win[wd] >= 540) cannotBeServed[k] = true;
win[wd] = cus[k] = cus[k] + win[wd];
pq.emplace(wd, win[wd]);
++k;
}
while (Q--) {
int x;
cin >> x;
if (cannotBeServed[x])
printf("Sorry\n");
else
printf("%02d:%02d\n", cus[x] / 60 + 8, cus[x] % 60);
}
return 0;
}
也有人吐槽LeetCode描述差,理解不了的,但跟这PAT比,LC简直不要好太多。不是单这一题,而是题库各处都透露着尴尬、违和。