Codeforces Rotation Matching(思维)

Codeforces Rotation Matching(思维)_第1张图片
解题思路:
由于第二个数组所有数字是同时向一个方向移动的,求移动后最大匹配项的数目,即可以转化为求原始数组中处在同一偏移量的数字个数的最大值,偏移量就等于b数组中某个数组与a数组中相同数字之间的绝对距离

代码:

#include 
using namespace std;
const int maxn=2e5+10;
int a[maxn],b[maxn],c[maxn],ans;
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;++i) {
        int temp;
        scanf("%d", &temp);
        a[temp]=i;
    }
    for(int i=1;i<=n;++i)
    {
        scanf("%d",&b[i]);
        int offset=i-a[b[i]];
        if(offset<0) offset+=n;
        c[offset]++;
    }
    for(int i=0;i<n;++i)
        ans=max(ans,c[i]);
    printf("%d\n",ans);
    return 0;
}

你可能感兴趣的:(思维)