一:杭电原题摘录
http://acm.hdu.edu.cn/game/entry/problem/show.php?chapterid=1§ionid=3&problemid=3
二.题目分析
题目大意是给出几组数,每组数包含一个开始时间和结束时间,问最多能完整的看几个节目.那不就是只要下一个节目开始的时间大于上一个节目结束的时间就行了嘛.但这样思考的前提是:这几组数的结束时间有序排列
开始时间 | 结束时间 |
1 | 3 |
3 | 4 |
0 | 7 |
3 | 8 |
2 | 9 |
5 | 10 |
6 | 12 |
4 | 14 |
10 | 15 |
8 | 18 |
15 | 19 |
15 | 20 |
三.我的收获
1.又一次认识到了有序排列在解决问题中的重要性,sort函数我爱你!
四.AC代码
#include <iostream>
#include <algorithm>
using namespace std;
struct jiemu
{
int s;
int e;
};
bool cmp(jiemu x,jiemu y)
{
return x.e<y.e;
}
int main()
{
int t;
struct jiemu a[100];
while(cin>>t && t){
for(int i=0;i<t;i++)
cin>>a[i].s>>a[i].e;
sort(a,a+t,cmp);
int end=a[0].e,count=1;
for(int i=1;i<t;i++)
if(a[i].s>=end) { end=a[i].e; count++; }
cout<<count<<endl;
}
return 0;
}