• 线段覆盖


    D14556. 线段覆盖

    时间限制1.0s   内存限制256.0MB

    输入文件名:test.in   输出文件名:test.out

    问题描述

      给定x轴上的N(0 < N < 100)条线段。每个线段由它的两个端点a_i和b_i确定,i=1,2,……,N。这些坐标都是区间(-999,999)的整数。有些线段之间会相互交叠或覆盖。请你写一个 程序,从给出的线段中去掉尽量少的线段,使得剩下的线段两两之间没有内部公共点。所谓内部公共点是指一个点同时属于两条线段至少在其中一条线段的内部(即除去端点的部分)。输入格式

      一个整数N。接下来有N行,每行有两个空格隔开的整数,表示一条线段的两个端点的坐标。

    输出格式

      一行:是一个整数表示最多剩下的线段数。

    样例输入

    3
    6 3
    1 3
    2 5

    样例输出

    2

    思路:

    与活动选择没有本质上的区别,只是多了一些细节处理。

    读入时左右端点非有序,要自己排一下。

    然后根据右端点大小排序,判断冲突与选择,此处段点可以相等,统计出解。

    证明略。

    注意由于坐标所在区间(-999,999),所以右端点的限值起始赋为-1000.

     

    Code:

    #include<bits/stdc++.h>
    
    #define e first
    
    #define b second
    
     
    
    using namespace std;
    
     
    
    int n, ans = 0;
    
    pair <int, int> line[110];
    
     
    
    int main(){
    
            freopen("test.in","r",stdin);
    
            freopen("test.out","w",stdout);
    
            cin >> n;
    
            for (int i = 1; i <= n; i++) {
    
                  int x, y;
    
                  cin >> x >> y;
    
                  line[i].b = min(x, y);
    
                  line[i].e = max(x, y);
    
           }
    
            sort(line + 1, line + n + 1);
    
            int last = -1000;//划重点,题目中坐标范围-999~999,起始结束时间要为-1000以下。
    
            for (int i = 1; i <= n; i++) {
    
                    if (line[i].b >= last) {
    
                            ans++;
    
                            last = line[i].e;
    
                    }
    
            }
    
            cout << ans << endl;
    
            return 0;
    
    }
  • 相关阅读:
    github提交用户权限被拒
    vue数据响应式的一些注意点
    总结一下做移动端项目遇到的坑
    react-router
    promise-async-await
    递归函数
    Linux基础
    所有的数据处理都是map-reduce
    Mac下配置JAVA_HOME
    MySQL高级
  • 原文地址:https://www.cnblogs.com/sun915/p/9494269.html
Copyright © 2020-2023  润新知