偶数拼塔形

发布时间 2023-11-25 10:27:55作者: 卡布叻-空白
#include <iostream>
#include <algorithm>

using namespace std;

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

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

        int l[n], r[n];
        for (int i = 0; i < n; i++) {
            cin >> l[i] >> r[i];
        }

        int time = 0;
        for (int i = 0; i < n; i++) {
            // 如果前面没有人排在当前学生前面,则开始结账
            if (time < l[i]) {
                time = l[i];
            }
            // 如果当前学生的忍耐极限时间超过了当前时间,则开始结账
            if (time <= r[i]) {
                cout << time << " ";
                time++;
            } else {
                cout << "0 ";
            }
        }

        cout << endl;
    }

    return 0;
}

首先,我们读取输入的整数 T,表示有 T 组测试数据。然后,使用 while 循环处理每组测试数据。

在每组测试数据中,我们首先读取整数 n,表示学生的数量。然后,使用两个数组 lr 分别存储每个学生的到达时间和忍耐极限时间。

接下来,使用变量 time 来记录当前时间。我们遍历每个学生,根据题目描述的规则判断他们开始结账的时间。

如果前面没有人排在当前学生前面(即当前时间小于学生的到达时间 l[i]),则开始结账的时间为学生到达时间。

如果当前学生的忍耐极限时间(r[i])大于等于当前时间(time),则开始结账的时间为当前时间,并将 time 加一。

最后,根据题目要求输出每个学生开始结账的时间或者输出 0 表示他们放弃结账。