题意:给定一个字符串你,其中为0的字符可以和相邻的交换位置(环形),问可以不可以变换成给定的字符串
思路:显然的交换并不会影响字符串的相对位置,所以记录一下相对位置就可以啦
#include <cstdio>
#include <queue>
#include <cstring>
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <map>
#include <string>
#include <set>
#include <ctime>
#include <cmath>
#include <cctype>
using namespace std;
#define maxn 200005
#define LL long long
int cas=1,T;
int a[maxn],b[maxn],t1,t2;
int main()
{
int n;
while (scanf("%d",&n)!=EOF)
{
for (int i = 0;i<n;i++)
{
int x;
scanf("%d",&x);
if (x==0)
continue;
a[t1++]=x;
}
for (int i = 0;i<n;i++)
{
int x;
scanf("%d",&x);
if (x==0)
continue;
b[t2++]=x;
}
int s = 0;
for (int i = 0;i<t2;i++)
{
if (b[i]==a[0])
{
s=i;
break;
}
}
int flag = 0;
for (int i = 0;i<n-1;i++)
if (a[i]!=b[(i+s)%(n-1)])
{
flag=1;
puts("NO");
break;
}
if (!flag)
puts("YES");
}
//freopen("in","r",stdin);
//scanf("%d",&T);
//printf("time=%.3lf",(double)clock()/CLOCKS_PER_SEC);
return 0;
}