bjut第二届算法

F:上课上课上课

总时间限制: 
1000ms
内存限制: 
256000kB
描述

ACSync 是个上课狂,大学期间曾立志要上完大学里所有的课,假设所有课都是年年开并且上课时间不变,聪明的你快来帮帮他算一下他的鸿鹄之志能否终成正果?

输入
​第一行为 2 个数 N, M,分别表示课程的总数和 ACSync 可以上课的总年数;
接下来的 N 行,第 i 行为两个整数 Ai, Bi (Ai <= Bi),表示第 i 门课程的上课时间 [Ai, Bi]。

如果两门课的上课时间 [Ai, Bi] 和 [Aj, Bj] 有重合,则这两门课不能在同一年上。

对于全部测试用例,1 <= N <= 1 000; 1 <= M <= 1 000; 1 <= Ai <= Bi <= 1 000 000 000。
输出
ACSync 能否在 M 年内学完所有课程?若是,输出「Yes」,否则输出「No」。
样例输入
​3 2
1 2
2 3
3 4
样例输出
Yes
提示
测试样例(具体不唯一):

1 2 和 3 4 在第一年;
2 3 在第二年;

故可以。

解法:第一年吧能上的课都上了,第二年上其他的,第三年。。。。反复

#include <iostream>
#include <vector>
#include <limits.h>
#include <string>
#include <algorithm>
using namespace std; 
class Cor
{
public:
	int low;
	int high;
	bool flag;//shagnmeishang
};
bool fun(Cor a,Cor b)//shifouyoujiaodian
{
	return a.low<b.low?true:false;
}

int main(int argc, char* argv[])
{
	int n,m;
	cin>>n>>m;
	vector<Cor> course;
	
	for(int q=0;q<n;q++)
	{
		int low,high;
		Cor temp;
		cin>>low>>high;
		temp.low=low;
		temp.high=high;
		temp.flag=false;
		course.push_back(temp);
	}
	int count=0;//shangguodekechengshumu
	sort(course.begin(),course.end(),fun);
	int di=0;
	for(int i=0;i<m;i++)
	{
		for(int j=0;j<course.size();j++)
		{
			if(course[j].flag==false)
			{
				if(course[j].low>di)
				{
					count++;
					course[j].flag=true;
					di=course[j].high;
				}
			}
		}
		di=0;
	}
	if(count==course.size())cout<<"Yes"<<endl;
	else cout<<"No"<<endl;
	//system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值