Codeforces Rotation Matching(思维)

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

代码:

#include <bits/stdc++.h>
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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章