zoukankan      html  css  js  c++  java
  • 整数区间--模拟

    (关于传送门...

    他死了...

    水出来营养膳食的我(咳咳过度开心导致脑子下线?

    连题都看不懂乐死自己了

    收拾收拾回家叭

    ----------------------------------------------------------------------------------------

    题目描述
    一个整数区间[A,B]
    请编程完成以下任务:
    1.从文件中读取区间的个数及其它们的描述;
    2.找到满足下述条件的所含元素个数最少的集合中元素的个数,对于每一个区间,都至少有两个不同的整数属于该集合。


    输入
    首行包括区间的数目 n,1<=n<=10000,接下来的 n 行,每行包括两个整数 a,b,被一空格隔开,0<=a<=b<=10000,它们是某一个区间的开始值和结束值。


    输出
    第一行集合元素的个数,对于每一个区间都至少有两个不同的整数属于该区间,且集合所包含
    元素数目最少。


    样例输入

    4

    3 6

    2 4

    0 2

    4 7

    样例输出

    4

    ----------------------------------------------------------------------------------------

    我理解的题意:

    求一个集合,是每一个区间在这个集合中都至少有两个元素,输出集合元素个数

    贪心:

    把区间先按右端点从小到大排序

    开两个变量来记录位置

    (保证x  < y)

    如果区间右端点大于y

    则这个区间者少有两个数被劝进集合中了

    continue掉就好了

    如果区间的右端点在x和y之间

    把x变成y,y变成这个区间的左端点

    同时ans++

    如果区间的右端点小于x

    x变成区间的左端点,y变成区间的右端点

    同时ans+=2

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    
    inline int read()
    {
        int sum = 0,p = 1;
        char ch = getchar();
        while(ch < '0' || ch > '9')
        {
            if(ch == '-')
                p = -1;
            ch = getchar();
        }
        while(ch >= '0' && ch <= '9')
        {
            (sum *= 10) += ch - '0';
            ch = getchar();
        }
        return p * sum;
    }
    
    int n,ans,x,y;
    struct qwq
    {
        int l,r;
        bool operator < (const qwq& other)const
        {
            return r < other.r;
        }
    }q[10005];
    
    int main()
    {
        n = read();
        for(int i = 1;i <= n;i++)
            q[i].l = read(),q[i].r = read();
        sort(q+1,q+n+1);
        x = y = -1;
        for(int i = 1;i <= n;i++)
        {
            if(x >= q[i].l && y >= q[i].l)
                continue;
            else
            if(y >= q[i].l)
            {
                x = y;
                y = q[i].r;
                ans++;
            }
            else
            {
                x = q[i].r - 1;
                y = q[i].r;
                ans += 2;
            }
        }
        printf("%d",ans);
        return 0;
    } 
  • 相关阅读:
    C# Excel操作类 ExcelHelper
    转战JS(1) 初探与变量类型、运算符、常用函数与转换
    jQuery插件实例五:手风琴效果[动画效果可配置版]
    jQuery插件实例四:手风琴效果[无动画版]
    安装nvm之后node不可用,“node”不是内部或外部命令,也不是可运行的程序或批处理文件(ng)
    git常用命令简集
    “No module named context_processors”
    初识Vue——计算属性和观察者
    初识Vue——模板语法
    初识vue——起步
  • 原文地址:https://www.cnblogs.com/darlingroot/p/10890469.html
Copyright © 2011-2022 走看看