- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
大学生电影节在北大举办! 这天,在北大各地放了多部电影,给定每部电影的放映时间区间,区间重叠的电影不可能同时看(端点可以重合),问李雷最多可以看多少部电影。
- 输入
- 多组数据。每组数据开头是n(n<=100),表示共n场电影。
接下来n行,每行两个整数(0到1000之间),表示一场电影的放映区间
n=0则数据结束 - 输出
- 对每组数据输出最多能看几部电影
- 样例输入
-
8 3 4 0 7 3 8 15 19 15 20 10 15 8 18 6 12 0
- 样例输出
-
3
- 来源
- Guo Wei
- 此题是贪心算法,只要先将所有电影按照结束时间从小到达排序,之后再遍历所有电影看下一部电影是否符合即可。
-
#include <iostream> #include <algorithm> using namespace std; struct film { int begin; int end; }; bool cmp(film a,film b) { if(a.end!=b.end) { return a.end<b.end; //按结束时间从小往大排序 } } int main() { int num; film f[105]; while(cin >> num && num != 0) { for(int i=0;i<num;i++) { cin>>f[i].begin>>f[i].end;//输入数据 } int t = 1; sort(f,f+num,cmp);//排序 int current_end = f[0].end; for(int i=1;i<num;i++) { if(f[i].begin>=current_end) { current_end = f[i].end; t++; } } cout<<t<<endl; } return 0; }