思路: 数组中的每一个元素的移位是相同的,只对b进行移位,a保持不动,记录a数组中与b相同的元素的下标之间的距离,最后用max找出最大值就好啦
#include<stdio.h>
//#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
const int N=2e5+10;
int a[N];
int b[N];
int pos[N]; //存下标
int ans[N]; //存差值
int main()
{
int n;
cin>>n;
int res=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
pos[a[i]]=i; //存a[i]的下标
}
for(int i=1;i<=n;i++)
{
cin>>b[i];
int c=pos[b[i]]-i; //表示同一元素在a和b中的下标差
if(c<=0)
{
c+=n;
}
ans[c]++; //记录每一个下标差出现的次数
res=max(res,ans[c]);
}
cout<<res<<endl;
}