新手光能
#include<bits/stdc++.h>
using namespace std;
struct tang{
int s,e;
}a[1001];
bool cmp(tang a,tang b){
return a.s<b.s;
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].s>>a[i].e;
}
sort(a+1,a+n+1,cmp);
int e=a[1].e,s=a[1].s;
for(int i=2;i<=n;i++){
if(e<a[i].s){
e=a[i-1].e;
cout<<s<<' '<<e<<endl;
s=a[i].s;
}
}
cout<<s<<' '<<a[n].e;
return 0;
}
Why??
汤启恩在2021-01-05 20:58:51追加了内容
dingg
初级守护
Why!!! me too!!!! l don't do it!!!!
I'm 0 ,too!!!
你的思路是什么?
看看我能不能按你的思路写出来!
初级守护
#include<bits/stdc++.h>
using namespace std;
int n;
int a[1005],b[1005];
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i]>>b[i];
}
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
if(a[i]>=a[j]&&a[i]<=b[j]){
a[i]=0,b[j]=0;
break;
}
else if(a[i]>=a[j]&&b[i]<=b[j]){
a[i]=0,b[i]=0;
break;
}
else if(b[i]>=a[j]&&b[i]<=b[j]){
b[i]=0,a[j]=0;
break;
}
}
}
for(int i=1;i<=n;i++){
if(a[i]!=0){
cout<<a[i]<<" ";
}
if(b[i]!=0){
cout<<b[i]<<endl;
}
}
return 0;
}
我的0分代码
新手天翼
我一百
思路:
1.定义结构体
2.按每个区间的左端点从小到大排序
3.遍历a数组如果a[i].l>p2(a数组:输入时的区间 p2:记录用的右端点)
b[++cnt].l=p1;(b数组:输出时的区间;cnt:记录当前存到了b数组的哪一个,初值为零;p1:记录用的左端点,***.l或***.r:l为左端点,r为右端点)
b[++cnt].l=p1;
p1=a[i].l;
b[cnt].r=p2;
p2=a[i].r;
否则
p2=max(p2,a[i].r);
4.特判:p1!=b[cnt].l||p2!=b[cnt].r
b[++cnt].l=p1;
b[cnt].r=p2;
5.输出