不难的题目,只要把节目的时间,按照播放结束时刻升序排序就OK。
因为题目中并没有要求计算出能观看节目的最大的时长。所以不必管节目开始时间。有兴趣的可以自己试一下。
#include<stdio.h>
#include<stdlib.h>
struct time
{
int start;
int end;
};
int Comp(const void *p1, const void *p2)
{
time *point1, *point2;
point1 = (time *)p1;
point2 = (time *)p2;
if((*point1).end != (*point2).end)
return (*point1).end > (*point2).end ? 1 : -1;
else
return (*point1).start > (*point2).start ? 1 : -1;
}
int main()
{
int n;
while(scanf("%d",&n) != EOF && n != 0)
{
time *arr;
arr = (time *)malloc(sizeof(time) * n);
for(int i=0; i<n; i++)
scanf("%d%d", &arr[i].start, &arr[i].end);
qsort(arr,n,sizeof(arr[0]),Comp);
int temp=0, count=1;
//最少有一个节目可以观看,也就是我们排序的第一个节目
for(int j=0; j<n; j++)
{
if(arr[temp].end <= arr[j].start)
{
count ++;
temp = j;
}
}
printf("%d\n",count);
}
return 0;
}