1525B - Permutation Sort
只能操作长度不超过\(n\)的区间。
对\(1\)和\(n\)所在的位置进行讨论:
- 若数组已经有序,则答案为\(0\)
- 若\(a[1]=1\),只需选择\([2,n]\)进行一次重排即可。同理,若\(a[n]=n\),只需选择\([1,n-1]\)进行一次重排即可。
- 若\(a[1]=n\)且\(a[n]=1\),则首先选择\([1,n-1]\)进行一次重排(让\(n\)放在\([2,n-1]\)中),再选择\([2,n]\)进行一次重排(让\(n\)归位,并让\(1\)放在\([2,n-1]\)中),最后选择\([1,n-1]\)让\(1\)归位,并排列好\([2,n-1]\)。
- 其他情况,对\([1,n-1]\)和\([2,n]\)分别操作一次即可让所有元素归位。
int n;
int main() {
int T;
cin >> T;
while(T--) {
cin >> n;
vector<int> a(n);
for(int &x : a)
cin >> x;
int ans = 2;
if(is_sorted(a.begin(), a.end()))
ans = 0;
else if(a[0] == 1 || a[n - 1] == n)
ans = 1;
else if(a[0] == n && a[n - 1] == 1)
ans = 3;
cout << ans << endl;
}
//system("pause");
return 0;
}