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;
        }
    }
    
    
    
     
  • 相关阅读:
    PHP读取MySQL中文乱码
    dotnet如何使用资源文件
    常见的隐藏地址的流媒体下载方法(转)
    圣诞礼物:Google Maps API开发样例一则
    Google EarthMapsKML核心开发技术揭秘 一个完整的Google Maps应用
    WEB界面测试用例~ 收藏
    通过xmlhttp实现报告归档
    转换长日期为短日期
    做delphi控件的笔记
    Reflector使用手记
  • 原文地址:https://www.cnblogs.com/xiongqiangcs/p/3654340.html
Copyright © 2011-2022 走看看