PAT 甲级 —— 1014 Waiting in Line

  • 开始时间大于等于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简直不要好太多。不是单这一题,而是题库各处都透露着尴尬、违和。

发布了33 篇原创文章 · 获赞 4 · 访问量 8734

猜你喜欢

转载自blog.csdn.net/Touchig/article/details/102905897