zoukankan      html  css  js  c++  java
  • ACM 找点

    找点

    时间限制:2000 ms  |  内存限制:65535 KB
    难度:2
     
    描述

    上数学课时,老师给了LYH一些闭区间,让他取尽量少的点,使得每个闭区间内至少有一个点。但是这几天LYH太忙了,你们帮帮他吗?

     
    输入
    多组测试数据。
    每组数据先输入一个N,表示有N个闭区间(N≤100)。
    接下来N行,每行输入两个数a,b(0≤a≤b≤100),表示区间的两个端点。
    输出
    输出一个整数,表示最少需要找几个点。
    样例输入
    4
    1 5
    2 4
    1 4
    2 3
    3
    1 2
    3 4
    5 6
    1
    2 2
    样例输出
    1
    3
    A

    本题贪心算法区间选点,主要考虑题目中是闭区间,故像区间[1,2]和区间[2,3]只需要一个点,注意要不断跟新先前的区间,特别像
    [1,5]
    [2,3]
    [6,7]
    其中[6,7]先前区间为[2,3],即为以前区间的交集

    #include <iostream>
    #include <vector>
    #include <utility>
    #include <algorithm>
    using namespace std;
    typedef pair<int,int> Segment;
    bool cmp(const Segment& a, const Segment& b){
        if(a.first!=b.first) return a.first < b.first;
        else return a.second < b.second;
    }
    int main(){
        int n;
        while(cin >>n ){
            vector<Segment> segments(n);
            for(int i = 0 ; i < n; ++i){
                int x1,x2;
                cin >>x1 >>x2;
                segments[i] = Segment(x1,x2);
            }
            sort(segments.begin(),segments.end(),cmp);
            int res = 1;
            Segment prev = segments[0];
            for(int i = 1; i < n; ++ i){
                if(segments[i].first> prev.second){
                     res++;
                    prev = segments[i];
                }else if(segments[i].second < prev.second){
                    prev.second = segments[i].second;
                }
            }
            cout<<res<<endl;
        }
    }
    
    
    
     
  • 相关阅读:
    samtools获取uniq reads
    NSDate的比较
    UIViewAlertForUnsatisfiableConstraints布局问题
    如何将网页保存为pdf
    使用Carthage管理iOS依赖库
    输出格式
    解决问题思路
    重:将好用的控件,上次github,
    解决CocoaPods慢的小技巧
    swift开发笔记28 CoreML
  • 原文地址:https://www.cnblogs.com/xiongqiangcs/p/3654340.html
Copyright © 2011-2022 走看看