zoukankan      html  css  js  c++  java
  • 线段覆盖

    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;
    
    }
  • 相关阅读:
    2021年下半年北京市中小学教师资格考试笔试报名公告
    高效演讲
    php的Allowed memory size of 134217728 bytes exhausted问题解决办法
    1111error
    http 500 错误
    xshell连接centons
    Vue 计算属性
    Vue 自定义指令
    Vue 事件绑定
    Vue v-cloak指令解决插值表达式“闪动”问题
  • 原文地址:https://www.cnblogs.com/sun915/p/9494269.html
Copyright © 2011-2022 走看看