题目大意:给定两个环,判断它们是否相同。

此题数据量并不大 (1n50,nL100)(1\le n\le 50,n\le L\le 100), 因此可以使用暴力的方式:

通过旋转 AA 环,每次将环上的第 ii 个元素移到第 i+1i+1 个位置(最后一个元素移到第一个元素的位置),并将旋转完毕后的 AA 环与 BB 环相比较,即可得出正解。

代码:

#include<bits/stdc++.h>
using namespace std;
int n,l,x,t; 
bool a[100],b[100],flag; //AB两环 (bool型,1表示有障碍物,0表示没有障碍物) 
int main()
{
	cin>>n>>l;
	for(int i=1;i<=n;i++) //输入A,B两环 
	{
		cin>>x;
		a[x]=true;
	}
	for(int i=1;i<=n;i++)
	{
		cin>>x;
		b[x]=true;
	}
	for(int i=1;i<=l;i++)
	{
		t=a[l-1]; //将最后一个元素存下来 
		for(int j=l-1;j>=1;j--) //将第j个元素移到j+1的位置 
		{
			a[j]=a[j-1];
		} 
		a[0]=t;	//把最后一个元素存到第一个位置 
		flag=true;
		for(int j=0;j<l;j++) //判断A环是否与B环相同 
		{
			if(a[j]!=b[j]) flag=false;
		}
		if(flag)
		{
			cout<<"YES"<<endl; //如果相同输出"YES" 
			return 0;
		}
	}
	cout<<"NO"<<endl; //如果转了一圈还没有重合输出"NO" 
	return 0;
}