区间选点问题。可能题目描述的不是太清楚。
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
struct M
{
int star1,star2,end1,end2;
}c[105];
bool cmp(M x,M y)
{
if(x.star1<y.star1) return true;
if(x.star1==y.star1&&x.star2<y.star2) return true;
return false;
}
int main()
{
int n,sum,i,temp;
while(scanf("%d",&n)!=EOF)
{
memset(&c,0,sizeof(&c));
for(i=0;i<n;i++)
{
scanf("%d:%d-%d:%d",&c[i].star1,&c[i].star2,&c[i].end1,&c[i].end2);
if(c[i].star1>c[i].end1||c[i].star1==c[i].end1&&c[i].star2>c[i].end2)
temp=c[i].star1,c[i].star1=c[i].end1,c[i].end1=temp,
temp=c[i].end2,c[i].end2=c[i].star2,c[i].star2=temp;//对时间后者小于前者的交换,小时和分钟都要交换
}
sort(c,c+n,cmp);
sum=1;
for(i=1;i<n;i++)
{
if(c[i].star1>c[i-1].end1||c[i].star1==c[i-1].end1&&c[i].star2>c[i-1].end2)
sum++;
else
{
if(c[i].end1>c[i-1].end1)
c[i].end1=c[i-1].end1,c[i].end2=c[i-1].end2;
if(c[i].end1==c[i-1].end1&&c[i].end2>c[i-1].end2)
c[i].end2=c[i-1].end2;
}
}
printf("%d\n",sum);
}
return 0;
}