1525B

只能操作长度不超过(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;
}
原文地址:https://www.cnblogs.com/fxh0707/p/14797281.html