这道题翻译不太容易理解
2026-08-12 11:46:52
发布于:贵州
本场考试的时间有两个硬性限制:
不能早于bi(最早只能 bi);
不能晚于 ai(最晚只能 ai);
必须等上一场考完才能考本场,也就是本场时间 ≥ end_time。
分支 1:end_time > T[i].b 含义:上一场考完的时间,晚于本场最早能考的时间。
例:上一场结束在 end_time=3,本场 bi=2。
现在你 3 点才有空,但本场最早 2 点就能考,你赶不上 2 点,只能往后拖。
又因为本场最晚只能到ai,所以本场只能安排在ai。
因此:end_time = T[i].a
分支 2:end_time <= T[i].b 含义:上一场考完的时间,早于 / 等于本场最早能考的时间。
例:上一场结束在 end_time=1,本场bi=2。
你 1 点就有空了,但本场最早要 2 点才能考,那就等到 2 点再考。
因此:end_time = T[i].b
#include<bits/stdc++.h>
using namespace std;
/*
输入样例
3
5 2
3 1
4 2
输出样例:2
*/
struct Test{
int a;
int b;
};
int main(){
int n;
cin>>n;
vector<Test> T(n);
for(int i=0;i<n;i++){
cin>>T[i].a>>T[i].b;
}
//排序 保证成绩单上的考试日期是递增的
sort(T.begin(),T.end(),[](Test x,Test y){
if(x.a != y.a) return x.a<y.a;
});
int end_time = 0;
for(int i = 0; i<n; i++) {
if(end_time > T[i].b) end_time = T[i].a;
else end_time = T[i].b;
}
cout<<end_time<<endl;
return 0;
}
这里空空如也

有帮助,赞一个