C. Rotation Matching

思路:可以看出,向左旋转和向右旋转都是一样的,因此在本题中,一律按向右旋转,记录数组a中的每一个元素到数组b中相应的元素需要向右移动几步,向右移动的步数中相同的最多的就是答案
#include <bits/stdc++.h> using namespace std; const int N = 2e5 + 10; int n, a[N], b[N]; map<int, int> m; int d[N], ans; int vis[N]; int main(){ cin >> n; for(int i=0;i<n;i++){ cin >> a[i]; m[a[i]] = i; } for(int i=0;i<n;i++){ cin >> b[i]; d[i] = (m[b[i]] - i + n) % n; vis[d[i]] ++; ans = max(ans, vis[d[i]]); } cout << ans << endl; return 0; }

浙公网安备 33010602011771号