2307 - 今年双11不AC
-
题目描述
-
双十一快要到了,本来是一件开心的事情,但是NQD学长却因为无法控制自己的双手为由,提前把钱包花了个透心凉,导致他现在十分内疚。
所以下定决心坚决执行剁手行动,但是又怕那天忍受不住诱惑。所以他想到了在双十一当天出去看一天电影,以此克制难耐不住的双手。但是当他打开手机查询当天电影的信息时,眼花缭乱的电影又让他十分苦恼,因为他抱着消磨时光的态度出去看电影的,所以他只想看尽量多的电影,而且每部无论多无聊,都要完整看完。当告诉你每部电影的开始和结束时间的时候,你是否能帮助无聊的NQD学长,求出最多能完整看到的电影的个数?
输入
-
输入数据包含多个测试实例,每个测试实例的第一行只有一个整数n(1<=n<=100),表示当天电影的总数,然后是n行数据,每行包括两个数据Ti_s,Ti_e (1<=i<=n),分别表示第i个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。
输出
-
对于每个测试实例,输出能完整看到的电视节目的个数,每个测试实例的输出占一行。
样例输入
-
31 1010 208 12
样例输出
-
2
-
思路分析:
-
这是一道简单的贪心问题,与房间安排问题相似,从小到大排序后比较前者结束时间与后者
-
开始时间,若结束时间小于开始时间,则可以看下一场电影,否则不能。
-
参考代码:
-
#include<stdio.h> #include<algorithm> using namespace std; struct t { int x; int y; }; bool cmp(t c,t d) { return c.x<d.x; } int main() { int n; while(~scanf("%d",&n)) { int i,j; struct t a[100],s; for(i=0;i<n;i++) { scanf("%d%d", &a[i].x ,&a[i].y ); } // for(i=0;i<n-1;i++)//冒泡排序 // { // for(j=0;j<n-i-1;j++) // { // if(a[j].x >a[j+1].x ) // { // s=a[j]; // a[j]=a[j+1]; // a[j+1]=s; // } // } // } sort(a,a+n,cmp); int cnt=0,l=n-1; for(i=n-2;i>=0;i--) { if(a[l].x >=a[i].y ) { cnt++; l=i; } } printf("%d\n",cnt+1); } return 0; }