题目描述
暑假到了,小明终于可以开心的看电视了。但是小明喜欢的节目太多了,他希望尽量多的看到完整的节目。
现在他把他喜欢的电视节目的转播时间表给你,你能帮他合理安排吗?
输入
每组输入的第一行是一个整数n(n<=100),表示小明喜欢的节目的总数。
接下来n行,每行输入两个整数si和ei(1<=i<=n),表示第i个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。
输出
输出能完整看到的电视节目的个数。
样例输入
12
1 3
3 4
0 7
3 8
15 19
15 20
10 15
8 18
6 12
5 10
4 14
2 9
样例输出
5
设计思路
将开始时间和结束时间存到一个结构体数组里面,对结束时间进行升序排列,再依次遍历每个结束时间,将有重叠的去掉,剩下的即为题目要求的情况。
我的代码
#include<stdio.h>
#include<cstdlib>
#include<algorithm>
#include<string.h>
using namespace std;
typedef struct
{
int s;
int e;
}node;//结构体数组存放始末时间
node a[105];
bool cmp(node a,node b)
{
return (a.e<b.e);
}//升序排列
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
memset(a,0,sizeof(a));//多样例下的数组初始化
int i=0,j,k,sum=1,flag;
int sub=n;
while(sub--)
{
scanf("%d%d",&a[i].s,&a[i].e);
i++;
}//读入数据
sort(a,a+n,cmp);
k=a[0].e;
for(j=1;j<n;j++)
{
if(a[j].s>=k)
{
k=a[j].e;
sum++;
}
}
printf("%d\n",sum);
}
return 0;
}