1 条题解

  • 0
    @ 2024-10-29 10:30:30

    优先选右端点小的; 先将区间按右端点从小到大排序; 选不重合的,且右端点小的,

    #include<bits/stdc++.h>
    using namespace std;
    struct node{
        int s;//左端点
        int f;//右端点
        //重置小于号运算符,右端点小的小
        bool operator < (const node &x) const{
            return f<x.f;
        }
    }a[1000005];
    int n;
    int ans=0;
    int main() {
        cin>>n;
        for(int i=1;i<=n;i++){
            cin>>a[i].s>>a[i].f;
        }
        sort(a+1,a+n+1);//按右端点从小到大排序
        int t=0;//左端点的最小值
        for(int i=1;i<=n;i++){//枚举每个线段
            if (a[i].s>=t){//没有重合部分
                ans++;//选之
                t=a[i].f;//下一条线段左端点的最小值
            }
        }
        cout<<ans;
        return 0;
    }

    信息

    ID
    613
    时间
    1000ms
    内存
    512MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者