巨巨来袭

来源:互联网 发布:电视上的点播软件 编辑:程序博客网 时间:2024/04/30 04:33

题目描述:

Description

hcbbt巨巨,正宗GFS,深受万千学妹的爱慕,人们为了得到他的一张照片日思夜想,也没有个结果.如今,巨巨为了帮助无奈的霞姐,做出巨大牺牲.他出了一道思考题,凡是能够解出来的,可以获得巨巨的照片.

题意如下:有n个人,巨巨对这些人的身高进行编号,最 矮的为1,以此类推,最高的为n,我们保证每个人的身高都不一样,所以每个人的编号都是不一样的.现在打乱这n个人的顺序,问最少的移动次数使其编号从小 到大排序,移动的规则限定如下:每次只能把其中一个人放在第一个人的最前面,这样算一次操作.

Input

包含T组数据。每组数据第一行为一个整数n,代表有n个人

第二行是现在n个人的编号顺序(0<n<5000)

Output

每组数据输出一行,表示最小的移动次数使得序列从小到大排列。

Sample Input

241 2 3 441 3 2 4

Sample Output

02

解题思路:在整个数组中寻找数组中最大的数,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;}


1 0
原创粉丝点击