学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!
附上汇总贴:小猴编程C++ | 汇总-CSDN博客
【题目描述】
某班有n个学生,编号1~n。中午下课后,学生们陆续赶到食堂吃饭。食堂只有一个打饭窗口,所以学生们要排队打饭。
第i个学生在第 l i l_i li分钟开始排队(当然是排在队尾)。如果同一分钟有多个学生同时开始排队,则编号较小的学生排在编号较大的学生之前。当一名学生排在队伍的最前端时,即轮到该名学生打饭。每个学生打饭需要花费一分钟时间。打到饭的学生,立即离开队伍,没打到饭的学生,在队伍里继续等待。
每个学生的耐心都是有限的。对于第i个学生,如果在第 r i r_i ri分钟时,他仍在排队,且未轮到他打饭(仍有人排在他之前),那么他就会直接离开,放弃打饭。
对于每个学生,请你确定他是在第几分钟开始打饭(即排到队首)的?
【输入】
第一行包含整数T,表示共有T组测试数据。
每组数据第一行包含整数n。
接下来n行,每行包含两个整数 l i , r i l_i,r_i li,ri,表示第i个学生到达队伍的时间以及忍耐的极限时间。
保证同一组数据的 l i l_i li是非递减的。
【输出】
每组数据输出一行结果,包含n个整数,其中第i个整数表示第i个学生开始打饭的时间,如果这个学生直接离开,放弃打饭,则输出0。
【输入样例】
2
2
1 3
1 4
3
1 5
1 1
2 3
【输出样例】
1 2
1 0 2
【代码详解】
#include <bits/stdc++.h>
using namespace std;
#define int long long
int t, n, l, r, x;
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> t;
while (t--) {
cin >> n;
x = 0;
while (n--) {
cin >> l >> r;
if (x<l) cout << l << " ", x = l + 1;
else if (x>r) cout << 0 << " ";
else cout << x << " ", x++;
}
cout << endl;
}
return 0;
}
【运行结果】
2
2
1 3
1 4
1 2
3
1 5
1 1
2 3
1 0 2