Intervals on the Ring

Posted Jozky86

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Intervals on the Ring相关的知识,希望对你有一定的参考价值。

Intervals on the Ring

题意:

给出环上的一组区间,需要构造环上的一组区间使得这些区间的交是给定的区间的并

题解:

集合的摩尔定理告诉我们: ∪ A i ‾ = ∩ A i ‾ \\overline{\\cup A_{i}}=\\cap\\overline{A_{i}} Ai=Ai(区间的并的补等于区间的补的交),所以直接输出每一段未被给出区间覆盖的区间的补即可
例如:n=6,A1=[1,1],A2=[3,3],A3=[5,5],则输出[3,1],[5,3],[1,5]

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e3+10;
int sum[maxn*2];
int a[maxn*2];
int t,n,m;
struct xy
{
	int l,r;
}e[maxn];
bool cmp(xy x,xy y)
{
	return x.l<y.l;
}
int main()
{
	cin>>t;
	while(t--)
	{
		cin>>n>>m;
		memset(sum,0,sizeof(sum));
		memset(e,0,sizeof(e));
		memset(a,0,sizeof(a));
		for(int i=1;i<=m;i++)
		{
			int a,b;
			cin>>a>>b;
			if(b<a)
			{
				sum[a]++,sum[b+n+1]--;
				//sum[1]++,sum[b+1]--;
			}
			else 
			{
				sum[a]++,sum[b+1]--;
			}
		}
		for(int i=1;i<=n;i++)
		{
			a[i]=a[i-1]+sum[i];
		}
		for(int i=n+1;i<=2*n;i++)
		{
			a[i]=a[i-1]+sum[i];
			if(a[i])
			{
				a[i-n]++;
			}
		}
		//cout<<1<<" "<<n<<endl;
		int tot=0;
		int flag=0;
		int x[maxn];
		int cnt=0;
		int l,r;
		a[n+1]=0;
		for(int i=1;i<=n+1;i++)
		{
			//cout<<a[i]<<endl;
			if(flag==0)
			{
				if(a[i])
				{
					flag=1;
					e[++tot].l=i;
					
					//x[++cnt]=i;
				}
			}
			else if(flag==1)
			{
				if(a[i]==0)
				{
					flag=0;
					e[tot].r=i-1;
					x[++cnt]=i-1;
				}
			}
			//cout<<i<<" "<<tot<<endl;
		 } 
		 //cout<<a[n]<<endl;
		 //cout<<tot<<endl;
		 //if(a[n])e[tot].r=n;
		sort(e+1,e+tot+1,cmp);
		
		 if(a[1]&&a[n])
		 {
		 	 
		 	if(tot==1)
		 	{
		 		cout<<1<<endl;
		 		cout<<1<<" "<<n<<endl;
		 		continue;
		 		
			 }
			 cout<<tot-1<<endl;
			 for(int i=2;i<=tot;i++)cout<<e[i].l<<" "<<e[i-1].r<<endl; 
		 	continue;
		 }
		 else 
		 {
		 	
		 	cout<<tot<<endl;
		 	if(tot==1)
		 	{
		 		cout<<e[1].l<<" "<<e[1].r<<endl;
			 }
			 else 
		 	{
		 		cout<<e[1].l<<" "<<e[tot].r<<endl;
		 		for(int i=2;i<=tot;i++)cout<<e[i].l<<" "<<e[i-1].r<<endl; 
		 	}
		 	continue;
		 	
		 }
		 	
		 	
		 
	}
	return 0;
}
/*
10
7
3
7 2
6 3
5 2
*/

以上是关于Intervals on the Ring的主要内容,如果未能解决你的问题,请参考以下文章

Range of Intervals

POJ1375 Intervals(直线与圆切线线段合并)

R语言ggplot2可视化:置信区间与分组具有相同色彩自定义置信区间带的色彩Make confidence intervals the same color as line by group

环境初始化 Build and Install the Apache Thrift IDL Compiler Install the Platform Development Tools(代码片段

LeetCode 435. Non-overlapping Intervals

maven web项目的web.xml报错The markup in the document following the root element must be well-formed.(代码片段