选择不相交区间,结构体排序

只记得学长让看选着不相交区间,当时只是轻轻一晃,没有太注意,但是后来我发现这样的话容易忘记所以今天特来总结,先来一道例题

经典例题:活动安排问题->http://acm.nyist.net/JudgeOnline/problem.php?pid=14

上代码

#include
#include
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             scanf("%d%d",&A[i].a,&A[i].b);
        sort(A,A+n,cmp);
        for(int i=0; i         {
            if(end < A[i].a) 
            {
                end = A[i].b;
                cnt++;
            }
        }
        printf("%d\n",cnt);
    }
    return 0;
}

我其实对这个题目的理解也不是特别深刻,刚才改了一下,就出现了错误,找了半天也没有找到,原来是排序排错了,他这个必须以结束的时间排序,而不能以开始的时间排序,其实刚开始我还是想不明白的,这样话其实举个例子就好了,但是我还是不能深刻的理解,就先放到这里吧,下面谈一下结构体排序,对了,补一下代码,上面还有一种排序(重载)

  1. struct Extent  
  2. {  
  3.     int a,b;  
  4.     bool operator < (const Extent& S)const  
  5.     {  
  6.         return b < S.b;  
  7.     }  
  8. }A[10002];  
这是重载的代码,关于结构体的代码,其实上面已经有过了,这里重新声明一下,是想提高自己的重视,毕竟自己不怎么会,

你可能感兴趣的:(选择不相交区间,结构体排序)