0
已解决
曹润持
高级守护
高级守护
4217 合并区间
经验值:1200 时间限制:1000毫秒 内存限制:128MB
题目描述 Description
给出一个区间的集合,请合并所有重叠的区间。
输入描述 Input Description
第一行,一个整数n
接下来n行, 每行两个整数,x y,表示一个区间(x, y)
输出描述 Output Description
合并之后的所有区间,每行一个。按左端点从小到大排序
样例输入 Sample Input
4 1 3 2 6 8 10 15 18
样例输出 Sample Output
1 6 8 10 15 18
数据范围及提示 Data Size & Hint
10≤n≤1000,对于每行输入的x、y,0<x<=y<2000
求求告诉思路(有代码最好)
#include <bits/stdc++.h>
using namespace std;
struct node{
int l,r;
}a[1005];
bool cmp(node x,node y){
return x.l<y.l;
}
int n,r1,l1;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].l>>a[i].r;
}
sort(a+1,a+n+1,cmp);
l1=a[1].l;
r1=a[1].r;
for(int i=1;i<n;i++){
//cout<<a[i].l<<' '<<a[i].r<<'\n';
if(a[i].r>=a[i+1].l){
r1=a[i+1].r;
}else{
cout<<l1<<' '<<r1<<'\n';
l1=a[i+1].l;
r1=a[i+1].r;
}
}
cout<<l1<<' '<<r1;
return 0;
}
#include<iostream>
#include<algorithm>
using namespace std;
struct qj{
int l,r;
}a[1005];
bool cmp(qj a,qj b){
if(a.l!=b.l)return a.l<b.l;
return a.r<b.r;
}
int cnt=1,n;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].l>>a[i].r;
}
sort(a+1,a+n+1,cmp);
int r=a[1].r;
int l=a[1].l;
for(int i=2;i<=n;i++){
//if(a[i].l>r) cout<<l<<' '<<r<<'\n';
cout<<l<<' '<<r<<'\n';
l=max(l,a[i].l);
r=max(r,a[i].r);
}
//cout<<cnt;
return 0;
}
曹润持在2022-08-08 15:17:32追加了内容
在线等,急
曹润持在2022-08-08 15:44:23追加了内容
ding~~~~~~~~~~~
曹润持在2022-08-08 19:00:56追加了内容
求解!!!!!!
0
已采纳
0