Codeforces Round #648 (Div. 2).C Rotation Matching
链接http://codeforces.com/contest/1365/problem/C
题目大意
给定两个数组,相对位置可以作环状运动,问按照相同下标的元素值相等的匹配方法,最大的匹配数是多少。
做法
由于每个元素 1到 n 只出现一次 且一定出现 。定义两个数组存两个数组每个元素的位置,再定义一个cnt数组记录位于两个数组中的每个元素的位置差(从左往右数)。之后找出相同距离的元素数量最多的差。得到答案
代码
#include<bits/stdc++.h> using namespace std; int a[200005]; int b[200005]; int cnt[200005]; int main(){ int n; cin>>n; for(int i=1;i<=n;i++){ int k; cin>>k; a[k]=i; } for(int i=1;i<=n;i++){ int k; cin>>k; b[k]=i; } for(int i=1;i<=n;i++){ cnt[(n+a[i]-b[i])%n]++; } int ans=0; for(int i=1;i<=n;i++){ ans=max(ans,cnt[i]); } if(n==1){ cout<<1; } else cout<<ans; }
rush!