题目链接:
点击打开链接
题意:给出n个考试,对于每一个考试有一个规定的考试时间ai,有一个可以提前进行考试的时间bi,(bi < ai),但是对于每一个考试,老师都只会在本子上记录下时间ai,想让本子上的时间是一个不降的序列。求最早多久能完成考试。
题解:要求ai单调递增,那么我们就让考试按照ai单调递增的顺序排序,若ai相等按照bi递增的顺序。并且因为bi < ai 所以假设能提前就让我提前。不能的话就按照ai来安排。
代码:
#include<bits/stdc++.h>
using namespace std;
//给出n个考试,
//对于每一个考试有一个规定的考试时间ai,
//有一个可以提前进行考试的时间bi,(bi < ai),
//但是对于每一个考试,
//老师都只会在本子上记录下时间ai,
//想让本子上的时间是一个不降的序列。
//求最早多久能完成考试。
const int maxn = 5000 + 5;
struct node{
int ai;
int bi;
}exam[maxn];
bool cmp(node a,node b){
if(a.ai == b.ai)
return a.bi < b.bi;
else return a.ai < b.ai;
}
int main(){
int n;
cin >> n;
for(int i = 0 ; i < n ; i ++){
scanf("%d %d",&exam[i].ai,&exam[i].bi);
}
sort(exam,exam+n,cmp);
int now = exam[0].bi;
for(int i = 1 ; i < n ; i ++){
//cout << now << endl;
if( exam[i].bi >= now)
now = exam[i].bi;
else
now = exam[i].ai;
}
cout << now << endl;
}