当前位置:   article > 正文

HNU_程序设计_数组_排队喝水_班有 n 个学生,下课铃一响,大家都去饮水机喝水,没有两个人能同时使用饮水机,因此,

班有 n 个学生,下课铃一响,大家都去饮水机喝水,没有两个人能同时使用饮水机,因此,

【问题描述】

  某班有 n 个学生,下课铃一响,大家都去饮水机喝水,没有两个人能同时使用饮水机,因此,同学们必须排队取水。

  第 i 个学生在第 li 秒来到队尾,如果同一时刻有多个学生来到队伍,则编号大的排在编号小的后面,排在队伍最前面的学生将花1秒的时间取水,然后离开,其他人在后面排队。如果到第 ri 秒学生 i 还没有取到水且他前面还有人,他将不打水而直接离开队伍。

   编程求每个学生取到水的时间。
  • 1
  • 2
  • 3
  • 4
  • 5

【输入形式】

   输入第一行为一个整数T,表示测试用例的个数。

   接下来是T个测试用例,每个用例的第一行为一个整数 n,表示学生数,接下来的 n 行,每行两个整数 li 和 ri ,分别表示第 i 个同学在第 li 秒来到队伍末尾,如果第 ri 秒还没取到水则离开队伍的时间。
  • 1
  • 2
  • 3

【输出形式】

   对于每个测试用例,输出 n 个整数,表示第 i 个学生取到水的秒数,如果没取到水则为0
  • 1

【样例输入】

2
2
1 3
1 4
3
1 5
1 1
2 3
【样例输出】

1 2
1 0 2

#include<iostream>
using namespace std;
int main() {
	int t=0;
	cin>>t;
	for(int i=0; i<t; i++) {
		int n=0;
		cin>>n;
		int stu[n];
		int maxt[n];
		for(int j=0; j<n; j++) {
			cin>>stu[j]>>maxt[j];
			if(j>=1) {
				for(int l=0; l<j; l++) {
					if(stu[j]==stu[l]&&stu[l]<=maxt[l]) {
						stu[j]++;
					}
					if(stu[j]<stu[l]&&stu[l]<=maxt[l]) {
						stu[j]=stu[l]+1;
					}
				}
			}
		}
		for(int k=0; k<n; k++) {
			if(stu[k]<=maxt[k]) {
				cout<<stu[k]<<' ';
			} else {
				cout<<0<<' ';
			}
		}
		cout<<endl;
	}
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/137404?site
推荐阅读
相关标签
  

闽ICP备14008679号