CodeForces - 479 C Exams (贪心)

题目链接: 点击打开链接
题意:给出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;
	
}

猜你喜欢

转载自blog.csdn.net/pk__pk/article/details/80435913
今日推荐