• Codeforces Beta Round #22 (Div. 2 Only) D. Segments(贪心)


     

    题目大意

     

    在 x 轴上,有 n(1<=n<=1000) 个线段,用最少的钉子把所有的线段钉住,输出这些钉子的坐标

     

    做法分析

     

    贪心

    先把所有的线段按照起点由小到大排序,起点相同的按照终点由大到小排序

    然后直接线性的扫一遍:不断的缩小钉子所在的区间,知道添加一条线段后,钉子所在的区间消失为止,然后,前面的所有的线段用一个钉子钉住,再接着往下扫,直到扫完了所有的线段

     

    参考代码

    D. Segments
     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 #include <vector>
     5 #include <algorithm>
     6 
     7 using namespace std;
     8 
     9 struct data
    10 {
    11     int s, t;
    12     bool operator <(const data &temp) const
    13     {
    14         if(s==temp.s) return t>temp.t;
    15         return s<temp.s;
    16     }
    17 } seg[1006];
    18 
    19 int n;
    20 vector <int> Dec;
    21 
    22 int deal(int id)
    23 {
    24     int End=seg[id].t;
    25     for(int i=id+1; i<n; i++)
    26     {
    27         if(seg[i].s<=End && seg[i].t<End) End=seg[i].t;
    28         if(seg[i].s>End)
    29         {
    30             Dec.push_back(seg[i-1].s);
    31             return i-1;
    32         }
    33     }
    34     Dec.push_back(seg[n-1].s);
    35     return n-1;
    36 }
    37 
    38 int main()
    39 {
    40     scanf("%d", &n);
    41     for(int i=0; i<n; i++)
    42     {
    43         scanf("%d%d", &seg[i].s, &seg[i].t);
    44         if(seg[i].s>seg[i].t) swap(seg[i].s, seg[i].t);
    45     }
    46     sort(seg, seg+n);
    47     Dec.clear();
    48     for(int i=0; i<n; i++)
    49     {
    50         i=deal(i);
    51     }
    52     n=(int)Dec.size();
    53     printf("%d\n", n);
    54     for(int i=0; i<n; i++)
    55     {
    56         printf("%d", Dec[i]);
    57         if(i==n-1) printf("\n");
    58         else printf(" ");
    59     }
    60     return 0;
    61 }

    题目链接 & AC通道

    Codeforces Beta Round #22 (Div. 2 Only) D. Segments

  • 相关阅读:
    面向对象 课堂记录
    面向对象10个案例 (来源网络)
    面向对象举例
    面向对象
    36选7
    Android ImageView的scaleType属性与adjustViewBounds属性
    安卓计算器 简单代码
    安卓单选、复选按钮简单练习
    安卓发送邮箱界面 线形、表格、相对布局方式
    UI和View 三种控制方式
  • 原文地址:https://www.cnblogs.com/zhj5chengfeng/p/3034352.html
Copyright © 2020-2023  润新知