关闭

选择不相交区间

430人阅读 评论(0) 收藏 举报
分类:
/****思路:
为什么要这样做呢;
首先分析一下题意,就是选择尽量多的不相交区间,那么我们就要去掉一些区间,使剩下
的区间不相交,那么我们要去掉什么样的区间呢?
我们假设区间 [a1,b1],[a2,b2]
1,如果a1<a2&&b1>b2,我们说区间1包含区间2,那么我们就要去掉区间1;
2,如果a1>a2&&b1>b2, 这时候我们仍然要去掉区间1,因为这样能够是我们选择的时间更多;
3,
4,
3和4 只不过是把a1和a2变变顺序
结合一二两点那么算法也就出来了
1,首先对区间按照b排序,那么我们只要a2>b1 的也就是变相的去掉了,1,2,哪两种情况
*/

#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
struct Node
{
    int x,y;
}a[10008];
bool cmp(Node a,Node b)
{
    return a.y<=b.y;
}
int main()
{
    int icase;
    int n,m;
    scanf("%d",&icase);
    while(icase--)
    {
        scanf("%d",&n);
        for(int i=0;i<n;i++)
        scanf("%d%d",&a[i].x,&a[i].y);
        sort(a,a+n,cmp);
        int abs = -1;
        int cn = 0;
        for(int i=0;i<n;i++)
        {
            if(a[i].x>abs){
            abs = a[i].y;
            cn++;
            }
        }
        printf("%d\n",cn);

    }
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:44206次
    • 积分:1376
    • 等级:
    • 排名:千里之外
    • 原创:96篇
    • 转载:2篇
    • 译文:2篇
    • 评论:0条