CF634A Island Puzzle 題解
分析
由於我們僅能移動 \(0\),所以其它數字的相對順序較原來應該是不變的,所以我們從環中刪除 \(0\) 再判斷相對位置即可。
還有需要注意的是本題是一個環,找到末尾需要用取模操作回到開頭繼續比較。
示例程式碼
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int a[N],b[N];
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin>>n;
int aa,bb;
for(int i=0;i<n-1;i++)
{
cin>>a[i];
if(a[i]==0)i--;
if(a[i]==1)aa=i;
}
for(int i=0;i<n-1;i++)
{
cin>>b[i];
if(b[i]==0)i--;
if(b[i]==1)bb=i;
}
// for(int i=0;i<n;i++)cout<<a[i]<<" ";
// cout<<endl;
// for(int i=0;i<n;i++)cout<<b[i]<<" ";
// cout<<endl;
bool flag=1;
for(int i=0;i<n-1;i++)
{
// cout<<a[(i+aa)%(n-1)]<<" "<<b[(i+bb)%(n-1)]<<endl;
if(a[(i+aa)%(n-1)]!=b[(i+bb)%(n-1)])
{
flag=0;
break;
}
}
if(flag)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
return 0;
}