题目大意:通过若干次将b数组头元素移至数组末尾(反过来也一样哈,不影响做题),求与a数组相同点(位置与元素的的值)的最大数量。
题解:记录数组a的每个元素位置,计算出数组b元素移动步数(保证同方向),取移动步数出现最多的值为答案。
AC代码如下:
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+10;
int a[N], b[N], n, cnt[N], p[N];
int main(){
cin>>n;
for(int i = 1; i <= n; ++i){
cin>>a[i];
p[a[i]] = i;
}
int m = 0;
for(int i = 1; i <= n; ++i){
cin>>b[i];
int po = p[b[i]] - i;
if(po < 0){
po += n;
}
cnt[po]++;
m = max(cnt[po], m);
}
cout<<m<<endl;
}