有S B没秒掉这道题
乌鱼子
题意:
思路:
对于排列的sort,最终状态就是1~N
设可以交换的距离为k
那么一个连通块的id就是i%k
一个排列能通过这种交换进行排序的充要条件就是
对于所有元素都满足i%k==pi%k
这道题显然输入都满足这个条件,问的是最大的k
显然k应该是每一个pi-i的因子,那就是求一求gcd就可以了
Code:
#include <bits/stdc++.h>
using namespace std;
signed main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int t;
cin >> t;
while (t--) {
int n, res = 0;
cin >> n;
for (int i = 1; i <= n; i++) {
int x; cin >> x;
res = __gcd(res, abs(x - i));
}
cout << res << "\n";
}
}