【思维】K.Bro排序

HDU 5122 K.Bro Sorting

题意:

输入个无序无重复数组,选中一个数后可以和其后比他小的一串数换位置,求要换几次。

题解:

用s[i]储存数组,倒序遍历,

在遇到1之前,所有相隔的距离都是要换的数。

#include<cstdio>
using namespace std;
const int N=1000000+5;
int s[N];
int main()
{
    int M,n,cnt=0;
    scanf("%d",&M);
    while(M--){
        scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d",&s[i]);
        int m=n,ans=0;
        for(int i=n;i>0;){
            if(s[i]==m){m--;i--;}
            else if(s[i]<m){ans+=m-s[i];m=s[i];}
            else i--;
            if(m==1)break;
        }
        printf("Case #%d: %d\n",++cnt,ans);
    }
}

猜你喜欢

转载自blog.csdn.net/synlhr/article/details/81184910
今日推荐