• 【贪心】线段覆盖


    【贪心】线段覆盖

    时间限制: 1 Sec  内存限制: 128 MB

    题目描述

      给定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
    1 3
    3 6

     1 #include <iostream>
     2 #include <algorithm>
     3 
     4 using namespace std;
     5 
     6 struct xian
     7 {
     8     int x,y;
     9 };
    10 
    11 xian a[111];
    12 int n;
    13 int cmp(xian a,xian b)
    14 {
    15     return a.y<b.y;
    16 }
    17 
    18 int main()
    19 {
    20     int x,y;
    21     while(cin>>n)
    22     {
    23         for(int i=0;i<n;i++)
    24         {
    25             cin>>x>>y;
    26             if(x>y)
    27                 swap(x,y);
    28             a[i].x=x;
    29             a[i].y=y;
    30         }
    31         sort(a,a+n,cmp);
    32         int t=0,tem=0;
    33         for(int i=0;i<n;i++)
    34         {
    35             if(a[i].x>=tem)
    36             {
    37                 t++;
    38                 tem=a[i].y;
    39             }
    40             else
    41                 a[i].x=-1;
    42         }
    43         cout<<t<<endl;
    44         for(int i=0;i<n;i++)
    45         {
    46             if(a[i].x!=-1)
    47                 cout<<a[i].x<<" "<<a[i].y<<endl;
    48         }
    49     }
    50     return 0;
    51 }
  • 相关阅读:
    数据操作-apply函数族
    11.盛水最多的容器
    canvas绘图
    Nodejs事件监听模块
    http性能测试
    源码解读
    nodejs的一些概念
    http知识补充
    querystring处理参数小利器
    url网址解析的好帮手
  • 原文地址:https://www.cnblogs.com/asuml/p/5692170.html
Copyright © 2020-2023  润新知