首页 > 其他 > 详细

周老师的区间问题

时间:2017-12-24 18:35:01      阅读:271      评论:0      收藏:0      [点我收藏+]
Description

周老师无聊时乱写了 n 个区间,但处女座的他随后又想将 n 个区间整理合并,但他发现区间太多了,于是他想请你帮帮他

 

 

Input

每次测试输入多组数据(小于100组),对于每组输入数据:

第一行为  n ,代表 n 个区间

接下来 n 行,每行两个数 s , t 代表区间 [s,t]

 

0 < n < 15000

0 <= s <= t < 10000000 

 

Output

第一行输出一个数字 q ,代表合并后剩余的区间个数

随后 q 行 按从小到大的顺序输出区间

 

Sample Input
3
2 4
1 3
7 7
Sample Output
2
1 4
7 7

#include<bits/stdc++.h>
using namespace std;
struct node{
    long long s;
    long long t;
}zone[15005];

bool cmp(node a,node b) {
    if(a.s!=b.s)
        return a.s < b.s;
    else
        return a.t < b.t;
}

int main()
{
    int n,ans;
    while(~scanf("%d",&n)) {
        ans =0;
        
        for(int i = 0; i < n; i++)    {
            scanf("%d %d",&zone[i].s,&zone[i].t);
        }
        
        sort(zone,zone+n,cmp);

        for(int i = 1; i < n; i++)    {
            if(zone[i].s <= zone[ans].t&&zone[ans].t < zone[i].t) {
                zone[ans].t = zone[i].t;
            }
            
            else if(zone[i].s <= zone[ans].t&&zone[ans].t >= zone[i].t) {
            
            }
            else if(zone[i].s > zone[ans].t) {
                ans++;
                zone[ans].s = zone[i].s;
                zone[ans].t = zone[i].t;
            }
        
                
        }
        
        cout<<ans+1<<endl;
        for(int i = 0; i <= ans; i++)
            printf("%lld %lld\n",zone[i].s,zone[i].t);
        
        
    }
    return 0;
}

 

 

周老师的区间问题

原文:http://www.cnblogs.com/jj81/p/8098556.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!