/*
选择不相交区间
时间限制:1000 ms | 内存限制:65535 KB
难度:2
描述
好吧。这道题的目的在于让大家认识贪心问题的三个区间经典问题:区间选点问题,区间覆盖问题,以及该题的选择不相交区间问题。有许多的贪心问题可以转化为这三类的问题。
那么,对于该问题。就是给一系列的区间,求最多的区间,要求区间个数最多,这些区间不相交,需要注意的是这些区间都是闭区间。
Just For Fun
输入
第一行一个数n为区间个数(n<=1000)
接下来有n行,每行有两个数a,b分别为区间的两个端点,a,b在int范围。
EOF结尾。
输出
输出如样例所示
样例输入
2
1 10
10 11
3
1 10
10 11
11 20
样例输出
Case 1:
1.
Case 2:
2.
好久没撸算法了,找点水题练练手,小贪心。
有个坑人的地方 a<b的时候 要交换一下输入数据的位置。
选择不相交区间
时间限制:1000 ms | 内存限制:65535 KB
难度:2
描述
好吧。这道题的目的在于让大家认识贪心问题的三个区间经典问题:区间选点问题,区间覆盖问题,以及该题的选择不相交区间问题。有许多的贪心问题可以转化为这三类的问题。
那么,对于该问题。就是给一系列的区间,求最多的区间,要求区间个数最多,这些区间不相交,需要注意的是这些区间都是闭区间。
Just For Fun
输入
第一行一个数n为区间个数(n<=1000)
接下来有n行,每行有两个数a,b分别为区间的两个端点,a,b在int范围。
EOF结尾。
输出
输出如样例所示
样例输入
2
1 10
10 11
3
1 10
10 11
11 20
样例输出
Case 1:
1.
Case 2:
2.
好久没撸算法了,找点水题练练手,小贪心。
有个坑人的地方 a<b的时候 要交换一下输入数据的位置。
*/
#include<stdio.h>
#include <stdlib.h>
struct node
{
int s; //开始
int t; //结束
};
node a[1001];
int cmp(const void *a,const void *b)
{
node *c = (node *) a;
node *d = (node *) b;
if(c->t>d->t)
{
return 1;
}
else
{
return -1;
}
}
int main()
{
int n,i,ans,tmp;
int num = 0;
while(scanf("%d",&n)!=EOF)
{
if(n==0)
{
printf("0\n");
}
else
{
for(i=0;i<n;i++)
{
scanf("%d%d",&a[i].s,&a[i].t);
if(a[i].s>a[i].t) // 坑 a<b的时候 要交换一下输入数据的位置。
{
int tem = a[i].s;
a[i].s = a[i].t;
a[i].t = tem;
}
}
qsort(a,n,sizeof(a[0]),cmp);//从小到大排序
tmp=0;
ans=1;
for(i=1;i<n;i++)
{
if(a[i].s>a[tmp].t) // 拿第二个开始 和第一个 结束比较 大于 开始加,并把位置记下
{
ans++;
tmp=i;
}
}
printf("Case %d:\n",++num);
printf("%d.\n",ans);
}
}
return 0;
}