思路:对于每一个位置的数字,我们计算一下它的偏移量。然后对于这个偏移量,我们记录一下它出现的次数。然后选取最大的那一个就可以了。
代码如下:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxx=2e5+100;
int a[maxx];
int b[maxx];
int vis[maxx],pos[maxx];
int n;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]),vis[a[i]]=i;
memset(pos,0,sizeof(pos));
for(int i=1;i<=n;i++)
{
scanf("%d",&b[i]);
pos[(i-vis[b[i]]+n)%n]++;
}
int _max=0;
for(int i=0;i<n;i++) _max=max(_max,pos[i]);
cout<<_max<<endl;
return 0;
}
努力加油a啊,(o)/~