nswoj-今年双11不AC

来源:互联网 发布:进货收货出售软件 编辑:程序博客网 时间:2024/06/07 22:35

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


0 0