只记得学长让看选着不相交区间,当时只是轻轻一晃,没有太注意,但是后来我发现这样的话容易忘记所以今天特来总结,先来一道例题
经典例题:活动安排问题->http://acm.nyist.net/JudgeOnline/problem.php?pid=14
上代码
#include <stdio.h>
#include <algorithm>
using namespace std;
struct Extent
{
int a,b;
} A[10002];
bool cmp(Extent x,Extent y)
{
return x.b<=y.b;
}
int main()
{
int z,n,cnt,end;
scanf("%d",&z);
while(z--)
{
cnt = 0;
end = -1;
scanf("%d",&n);
for(int i=0; i<n; i++)
scanf("%d%d",&A[i].a,&A[i].b);
sort(A,A+n,cmp);
for(int i=0; i<n; i++)
{
if(end < A[i].a)
{
end = A[i].b;
cnt++;
}
}
printf("%d\n",cnt);
}
return 0;
}
我其实对这个题目的理解也不是特别深刻,刚才改了一下,就出现了错误,找了半天也没有找到,原来是排序排错了,他这个必须以结束的时间排序,而不能以开始的时间排序,其实刚开始我还是想不明白的,这样话其实举个例子就好了,但是我还是不能深刻的理解,就先放到这里吧,下面谈一下结构体排序,对了,补一下代码,上面还有一种排序(重载)
- struct Extent
- {
- int a,b;
- bool operator < (const Extent& S)const
- {
- return b < S.b;
- }
- }A[10002];