題解:CF634A Island Puzzle

Ryan_Adam發表於2024-08-02

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;
}

相關文章