zoukankan      html  css  js  c++  java
  • 7-10 选点问题 (15分)

     

    数轴上有n个闭区间[ai, bi]。取尽量少的点,使得每个区间内都至少有一个点(不同区间内含的点可以是同一个)。

    输入格式:

    第一行一个数字n,表示有n个闭区间。 下面n行,每行包含2个数字,表示闭区间[ai, bi]

    输出格式:

    一个整数,表示至少需要几个点

    输入样例:

    在这里给出一组输入。例如:

    3
    1 3
    2 4
    5 6
    

    输出样例:

    在这里给出相应的输出。例如:

    2
    

    代码:

    #include <iostream>
    #include<algorithm>
    using namespace std;
    
    typedef struct
    {
        int start;
        int end;
        bool x=0;  //x=0表示未处理
    }section;
    
    bool complare(const section &a,const section &b){   //自己定义sort排序规则,按start从小到大排序
        return a.start<b.start;
    }
    
    int main(){
        
        //输入 
        int n;         //表示有n个闭区间
        cin>>n;
        section a[n+1]; //从1开始
        int count = 0;
        for(int i=1;i<=n;i++){
            cin>>a[i].start>>a[i].end;
        } 
        //排序
        sort(a+1,a+1+n,complare);
    
        //处理
        for(int i=1;i<=n;i++)
        {
            if( a[i].x == 1 ) continue;  
            int front = a[i].start;
            int back = a[i].end;
            for(int j=i+1;j<=n;j++)        //以第i个区间为基准,找后面的区间有多少个与a[i],若重叠,标记该区间,再取重叠部分继续往下找
            {
                if( a[j].x == 1 ) continue;
                if( a[j].start <= back )    // 头在区级 a【i】里面
                { 
                    front = a[j].start;      
    if(a[j].end<=back) back = a[j].end; //尾部也在区间 a[i] 里面 a[j].x = 1; // 已处理过,做标记1 } } count ++; a[i].x = 1; // 可以去掉 } cout<<count<<endl; return 0; }
  • 相关阅读:
    第3章 Python的数据结构、函数和文件
    字符与编码
    第2章 IPython和Jupyter
    第1章 准备工作
    (转)详解Python的装饰器
    (转)Python中的split()函数
    5.5 用户定义的可调用类型
    2.6 序列的增量赋值
    Zookeeper简析
    Dubbo-服务引入源码分析
  • 原文地址:https://www.cnblogs.com/lvjingyuan/p/13943983.html
Copyright © 2011-2022 走看看