买书猜想

#include <iostream>

using namespace std;

int main() {
    int T;
    cin >> T;

    while (T--) {
        int n;
        cin >> n;

        int startTimes[n];  // 用于存储每个学生开始结账的时间
        int patienceLimits[n];  // 用于存储每个学生的忍耐极限时间点

        for (int i = 0; i < n; i++) {
            cin >> startTimes[i] >> patienceLimits[i];
        }

        int currentTime = startTimes[0];  // 当前时间初始化为第一个学生到达的时间

        for (int i = 0; i < n; i++) {
            if (currentTime < startTimes[i]) {
                currentTime = startTimes[i];  // 更新当前时间为当前学生到达的时间
            }

            if (currentTime > startTimes[i] + patienceLimits[i]) {
                cout << 0 << " ";  // 如果当前时间超过了当前学生的忍耐极限时间点,输出0
            } else {
                cout << currentTime << " ";  // 输出当前时间作为当前学生开始结账的时间
                currentTime++;  // 当前时间增加1分钟
            }
        }

        cout << endl;
    }

    return 0;
}

我们使用了固定大小的数组startTimespatienceLimits来存储这些信息。

在主循环中,我们首先读取n个学生的开始结账时间和忍耐极限时间点,并将它们分别存储在startTimespatienceLimits数组中。

然后,我们初始化当前时间currentTime为第一个学生的到达时间startTimes[0]。接下来,我们使用一个循环遍历每个学生,并根据题目描述的规则进行处理。

如果当前时间小于学生的开始结账时间,我们将当前时间更新为学生的开始结账时间,以确保按照要求排队。

如果当前时间超过了学生的忍耐极限时间点(即当前时间大于startTimes[i] + patienceLimits[i]),那么该学生直接离开,放弃结账,我们输出0。

否则,我们输出当前时间作为当前学生开始结账的时间,并将当前时间增加1分钟,表示结账完成。

posted @ 2023-11-25 13:31  卡布叻-空白  阅读(21)  评论(0)    收藏  举报