Acwing1696. 困牛排序

题意

给定一个n个数的排列,每次操作将第一个数插入到任意数之后,求多少次操作后排列为升序

\(a_i>a_{i+1}\) 那么至少操作i次才能将\(a_i\)插入到\(a_{i+1}\)之后

这时我们思考是否可以通过i次操作,使得序列有序,假如此时\(a_{i+1~n}\) 有序

于是我们可以通过插入排序,使得序列有序

如何保证\(a_{i+1~n}\) 有序,只需要找到第一个\(a_i>a_{i+1}\)即可

CODE

#include<bits/stdc++.h>

using namespace std;
int n;
int m[120];
int main(){
    cin>>n;
    for(int i=1;i<=n;++i) cin>>m[i];
    for(int i=n-1;i>=1;--i){
        if(m[i]>m[i+1]){
            cout<<i<<endl;
            return 0;
        }
    }
    cout<<0<<endl;
    return 0;
}

思维题需要注重思考,而不是一味靠算法

posted @ 2024-12-03 19:14  归游  阅读(11)  评论(0)    收藏  举报