巨巨來襲

題目描述:

Description

hcbbt巨巨,正宗GFS,深受萬千學妹的愛慕,人們爲了得到他的一張照片日思夜想,也沒有個結果.如今,巨巨爲了幫助無奈的霞姐,做出巨大犧牲.他出了一道思考題,凡是能夠解出來的,可以獲得巨巨的照片.

題意如下:有n個人,巨巨對這些人的身高進行編號,最 矮的爲1,以此類推,最高的爲n,我們保證每個人的身高都不一樣,所以每個人的編號都是不一樣的.現在打亂這n個人的順序,問最少的移動次數使其編號從小 到大排序,移動的規則限定如下:每次只能把其中一個人放在第一個人的最前面,這樣算一次操作.

Input

包含T組數據。每組數據第一行爲一個整數n,代表有n個人

第二行是現在n個人的編號順序(0<n<5000)

Output

每組數據輸出一行,表示最小的移動次數使得序列從小到大排列。

Sample Input

2
4
1 2 3 4
4
1 3 2 4

Sample Output

0
2

解題思路:在整個數組中尋找數組中最大的數,s=1;在最大的數之前尋找整個數組裏次大的數。如果不存在,結果爲數組長度(n)-s,退出尋找;如果存在則s++,尋找次大數之前是否有第三大的數。以此類推。

代碼如下:

#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
int cmp(int a,int b)
{
    return a<b;
}
int main()
{
    int num,n;
    int a[6000],b[6000];
    cin>>num;
    while(num--)
    {
        int m=0,s=1;   //m記錄最大數位置 s記錄不需要移動的次數
        cin>>n;
        a[0]=0;
        for(int i=1; i<=n; i++)
        {
            cin>>a[i];
            b[i]=a[i];
            if(a[m]<a[i])
                m=i;
        }
        sort(b+1,b+n,cmp);
        for(int i=m-1,j=n-1;i>0;i--)
        {
            if(a[i]==b[j])
            {
                j--;
                s++;
            }
        }
        cout<<n-s<<endl;
    }
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章