牛6 I:Intervals on the Ring
题面:已知1到n的环,给定m个区间,要求构造若干个区间,它们的交集是原区间的并集。
解析:根据集合里面的概念, 区间补的交等于区间并的补;
原区间并的补就是未覆盖区域,相当于m个未覆盖区间的并,所以只要构造区间是未覆盖区域的补即可。
代码:
#include<bits/stdc++.h> using namespace std; int t,n,m; struct node{ int x,y; }s[100005]; bool cmp(node a,node b){ return a.x<b.x; } int main() { cin>>t; while(t--){ cin>>n>>m; for(int i=0;i<m;i++) cin>>s[i].x>>s[i].y; sort(s,s+m,cmp); cout<<m<<endl; for(int i=0;i<m;i++) cout<<s[(i+1)%m].x<<" "<<s[i].y<<endl; } }