zoukankan      html  css  js  c++  java
  • vijos 1439 区间

    背景

    描述

    给定n个闭区间 [ai,bi], i=1,2,...,n. 这些区间的和可以用两两不相交的闭区间的和来表示。你的任务是找到这样的区间数目最少的表示,且把它们按升序的方式写到输出文件中。当且仅当a <= b < c <= d时,区间[a; b] 、[c; d]才是升序
    写一个程序完成以下任务:
    读取区间
    计算出满足上述条件的两两不相交的区间
    把找到的区间按升序输出

    格式

    输入格式

    第一行只有一个数n, 3 <= n <= 50000,代表区间数.第I+1行有两个数ai,bi,之间用一个空格隔开,分别表示区间[ai,bi]的起始和结束(1 <= i <= n),1 <= ai <= bi <= 1000000

    输出格式

    输出文件应该包含计算出的所有区间,每行写一个区间,每行只有两个数,分别是区间起始和结束,之间用一个空格分开。记住必须是按升序输出。

    样例1

    样例输入1

    5 
    5 6 
    1 4
    10 10
    6 9
    8 10
    

    样例输出1

    1 4
    5 10
    

    限制

    各个测试点1s

    提示

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define MAXN 50010
    using namespace std;
    int n;
    struct nond{ int a,b; }v[MAXN];
    int cmp(nond x,nond y){
        if(x.a==y.a)    return x.b<y.b;
        else return x.a<y.a;
    }
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d%d",&v[i].a,&v[i].b);
        sort(v+1,v+1+n,cmp);
        int l=v[1].a,r=v[1].b;
        for(int i=2;i<=n;i++){
            if(v[i].a<=r)    r=max(v[i].b,r);
            else {
                printf("%d %d
    ",l,r);
                l=v[i].a;r=v[i].b;
            }
        }
        printf("%d %d
    ",l,r);
    }
    /*
    5 
    5 6 
    1 4
    6 9
    8 10
    8 11
    */
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    6410实现网卡(DM9000A)收发功能及ARP协议实现
    Shuffling Machine和双向链表
    Have Fun with Numbers及循环链表(约瑟夫问题)
    Tiny6410 LCD设置
    RAM与内存
    inet_addr解析
    map容器find用法
    WinSock编程(TCP)
    Python 时间序列作图及注释
    无法打开之前cuda的vs项目,打开之后变灰色
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/9059155.html
Copyright © 2011-2022 走看看