原题链接
给出m(<=1e3)个区间,区间可以是从l至n再到1至r(l>r),求一些区间使得这些区间的交集是该m区间的并集。
分析:
经分析将m个区间排序,易知答案即是:
第一个区间的l与最后一个区间的r形成的区间、第二个区间的l与第一个区间的r形成的区间、第三个区间的l与第而个区间的r形成的区间。。。。。。的交集。
struct Node{
int l,r;
bool operator <(const Node &a){
return l<a.l;
}
};
vector<Node> all;
int main(){
int t,n,m,l,r;
scanf("%d",&t);
while(t--){
all.clear();
scanf("%d %d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d",&l,&r);
if(l>r) all.push_back({1,r}),all.push_back({l,n});
else all.push_back({l,r});
}
sort(all.begin(),all.end());
printf("%d\n%d %d\n",all.size(),all.front().l,all.back().r);
for(int i=0;i<all.size()-1;i++) printf("%d %d\n",all[i+1].l,all[i].r);
}
return 0;
}