• HihoCoder1672 : 区间问题([Offer收割]编程练习赛41)(贪心)


    时间限制:10000ms
    单点时限:1000ms
    内存限制:256MB

    描述

    给定N个区间[Ai, Bi],请你找到包含元素最少的整数集合S,使得每个区间都至少有两个整数在S中。  

    例如给定三个区间[1, 3], [1, 4], [2, 5],则S={2, 3}。

    输入

    第一行包含一个整数N。

    以下N行每行包含两个整数Ai, Bi。  

    对于30%的数据,1 ≤ N ≤ 1000  

    对于100%的数据, 1 ≤ N ≤ 100000 1 ≤ Ai < Bi ≤ 1000000

    输出

    输出一个整数代表S的大小。

    样例输入
    3  
    1 3 
    1 4  
    2 5  
    
    样例输出
    2
    • 模型:借教室。 
    • 手段:贪心,按第二关键词或者第一关键字(应该可以)。
    #include<cstdio>
    #include<cstdlib>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    const int maxn=2000010;
    struct in { int a; int b; } x[maxn];
    bool cmp(in x,in y) {  if(x.b==y.b) return x.a>y.a;  return x.b<y.b;}
    int main()
    {
        int ans=0,n,i,j,laxt=0,pre=0;
        scanf("%d",&n);
        for(i=1;i<=n;i++) scanf("%d%d",&x[i].a,&x[i].b);
        sort(x+1,x+n+1,cmp);
        for(i=1;i<=n;i++){
            if(pre>=x[i].a) continue;
            else if(laxt>=x[i].a) ans++,pre=laxt,laxt=x[i].b;
            else ans+=2,laxt=x[i].b,pre=laxt-1;      
        }
        printf("%d
    ",ans);
        return 0;
    }
  • 相关阅读:
    oracle查询第几行到第几行的数据
    php/js将 CST时间转成格式化时间
    js获取当前时间:yyyy-MM-dd HH:MM:SS
    mysql 查询时间戳格式化 和thinkphp查询时间戳转换
    Java语言基础:运算符
    APP的三种开发模式
    架构图-模型
    Java语言基础:常量和变量
    APP开发之Dcloud简介
    APP开发
  • 原文地址:https://www.cnblogs.com/hua-dong/p/8098917.html
Copyright © 2020-2023  润新知