欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PIPIOJ 1323: 区间合并 贪心

程序员文章站 2022-04-01 17:28:36
...

题目:

http://39.106.164.46/problem.php?id=1323

思路:

贪心。将左端点按照从小到大排序,然后依次比较合并区间即可。

代码如下:

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<cmath>
#include<queue>
#include<cstring>
#include<vector>
#include<stack>
#include<map>
#include<set>
#define MAX 100005
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std;

struct node{
    int x,y;
    bool operator < (const node &a) const{
        return x<a.x;
    }
};

int n;
node a[MAX];

int main(){
    while(scanf("%d",&n)!=EOF){
        for(int i=0;i<n;i++){
            scanf("%d %d",&a[i].x,&a[i].y);
        }
        sort(a,a+n);
        node ans[n+1];
        ans[0].x=a[0].x,
        ans[0].y=a[0].y;
        int cnt=0;
        for(int i=1;i<n;i++){
            if(ans[cnt].y>=a[i].x&&ans[cnt].y<a[i].y){
                ans[cnt].y=a[i].y;
            }else if(ans[cnt].y<a[i].x){
                ans[++cnt].x=a[i].x;
                ans[cnt].y=a[i].y;
            }
        }
        printf("%d\n",cnt+1);
        for(int i=0;i<=cnt;i++){
            printf("%d %d\n",ans[i].x,ans[i].y);
        }
    }
    return 0;
}
相关标签: PIPIOJ