这翻译,这样例,哭死!!!
2026-04-29 18:26:42
发布于:北京
题目来自codeforces,传送门:C. Exams
没想明白题,去看了下原文,题目描述翻译如下:
题意
瓦莱拉是一名大学本科生,期末考试即将来临,他一共需要参加 n 场考试。瓦莱拉很聪明,任何考试他都能一次通过。此外,他可以在同一天参加多场考试,且考试顺序随意。
根据学校安排,第 i 门科目的原定考试日期为第 ai 天。不过瓦莱拉和每位老师都提前协商好了:第 i 科目的老师允许他提前在第 bi 天参加考试(满足 bi < ai)。因此,第 i 门考试,瓦莱拉二选一:要么提前在 bi 天考;要么按原计划在 ai 天考。所有老师都会在实际考试当天把成绩录入成绩单,但成绩单上标注的成绩日期,统一写原定日期 ai。
瓦莱拉认为:如果成绩单上标注的成绩日期不是非递减顺序,会非常奇怪。请你帮他规划考试时间:在保证成绩单上日期非递减的前提下,求出他最后一场考试的最早结束日期。
输入
第一行输入一个正整数 n(1≤n≤5000),代表瓦莱拉需要参加的考试总场数。
接下来 n 行,每行包含两个用空格隔开的正整数 ai 和 bi(1 ≤ bi < ai ≤10^9):ai 是第 i 门考试的原定正式日期,bi 对应这门考试可以提前参加的日期。
输出
输出一个整数。在保证成绩单上所有记录日期呈非递减顺序的前提下,求出瓦莱拉考完最后一门考试的最小可行天数。
原题看完了,题目的翻译还是大概表述出了原题题意,但确实妨碍了理解。此外,一开始错,本来想通过样例来进一步理解一下题意,但下载下来的后台测试样例竟然有问题(部分样例中bi的值的竟然是大于ai的),然后n的值最大不是5000,估计是10000。
题意清楚了,貌似也不难写了。
首先按照第一个日期(也就是老师规定的日期)排序。
设定一个考试时间 end=0,然后对于每一个 ai ,bi:如果考试时间 大于 商量的日期,相当于无法按商定的日期考试,则更新考试时间为老师规定的日期,否则设为商量的日期。
#include<bits/stdc++.h>
using namespace std;
struct node {
int a, b;
} arr[10005];
bool cmp(node a, node b) {
if(a.a!=b.a) return a.a<b.a;
}
int main() {
int n;
cin>>n;
for(int i = 0; i<n; i++) {
cin>>arr[i].a>>arr[i].b;
}
sort(arr, arr+n,cmp);
int curr=0;
for(int i = 0; i<n; i++) {
if(curr>arr[i].b) curr=arr[i].a;
else curr=arr[i].b;
}
cout<<curr;
return 0;
}
这里空空如也

有帮助,赞一个