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;
}
posted @ 2021-05-21 20:22  Dazzling!  阅读(26)  评论(0编辑  收藏  举报