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; }