codeforces 1365c最多偏差量

题意:
先给出一个数n,再给出两列从1到n随机排列的数组,可对每个数组进行左移操作或右移操作,求每个位置对应相同的个数最多是多少个
思路:
分别记录第二列的每一个需要移动多少次到达第一列中的位置,对需要移动的位置长度计数,移动最多的数就是能对应的最大个数。

#include 
using namespace std;
int main()
{
    int n;
    cin>>n;
    int a[200005],m;
    for(int i=0;i<n;i++){
        cin>>m;
        a[m]=i;
    }
    int mv[200005];
    memset(mv,0,sizeof(mv));
    for(int i=0;i<n;i++){
        cin>>m;
        if(i<=a[m]) mv[a[m]-i]++;
        else if (i>a[m]) mv[n-i+a[m]]++;
    }
    int ans=0;
    for(int i=0;i<n;i++){
        ans=max(mv[i],ans);
    }
    cout<<ans<<endl;
    return 0;
}

你可能感兴趣的:(codeforces 1365c最多偏差量)