zoukankan      html  css  js  c++  java
  • 51nod 1133 不重叠的线段

    题目链接:http://class.51nod.com/Challenge/Problem.html#problemId=1133

    X轴上有N条线段,每条线段有1个起点S和终点E。最多能够选出多少条互不重叠的线段。(注:起点或终点重叠,不算重叠)。

    例如:[1 5][2 3][3 6],可以选[2 3][3 6],这2条线段互不重叠。

    输入

    第1行:1个数N,线段的数量(2 <= N <= 10000)
    第2 - N + 1行:每行2个数,线段的起点和终点(-10^9 <= S,E <= 10^9)

    输出

    输出最多可以选择的线段数量。

    输入样例

    3
    1 5
    2 3
    3 6

    输出样例

    2


    二、解题思路
    根据我在草稿纸上随便话线段并找到规律:选结束早的线段比较好

    三、代码
     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm> 
     4 using namespace std;
     5 
     6 struct node{
     7     int start;//开始(输入) 
     8     int end;//结束(输入) 
     9 }a[100001];
    10 
    11 bool cmp(node x, node y){
    12     return x.end < y.end;//结束早的在左边,结束晚的在右边 
    13 }
    14 
    15 int main(){
    16     int n, ans=0, r=-(1e9 + 2);//ans表示能选择几个,r表示可以选的范围的开始下标 
    17     cin >> n;
    18     for(int i = 0;i < n;i++){
    19         cin >> a[i].start >> a[i].end;//输入 
    20     }
    21     sort(a,a+n,cmp);//按照什么时候结束来排序 
    22     for(int i = 0;i < n;i++){
    23         if(a[i].start >= r){//如果现在第i个线段没有和刚才选的那个线段重叠说明可以选 
    24             r = a[i].end;//r为现在第i个线段结束的下标 
    25             ans++;//选的线段的数量+1 
    26         }
    27     }
    28     cout << ans << endl;
    29     return 0;
    30 }

     

  • 相关阅读:
    JavaScript实现常见排序算法
    执行环境与作用域
    几种常见的三列布局,中间自适应,两边定宽
    常见的两列布局
    CodeAtlas For Sublime Text
    增加调用路径查找
    增加调用被调用个数隐喻
    sublime 插件
    分析大工程
    Jmeter 分布式测试
  • 原文地址:https://www.cnblogs.com/elisa02/p/12780304.html
Copyright © 2011-2022 走看看