九度1398:移动次数

题目1398:移动次数
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:1331
解决:346
题目描述:
众所周知JOBDU旗下的JOBBALA公司是一家以个性、亲民著称的IT公司。在JOBBALA公司成立50周年的日子里,公司CEO组织全体员工登山旅游。按照往常的习惯,导游通常要求游客按照身高从低到高的顺序排好,但是考虑这次JOBBALA人数太多,排序很耗时间。因此,导游想了想,要求JOBBALA的员工可以随便排,但是必须保证队列的第一个是队列中最矮的,队列的最后一个是队列中最高的。例如:队列 { 1, 4, 3, 2, 2, 5} 就是符合的队列,{1, 4, 2, 3, 2, 5}也符合,而{2, 1, 2,
3, 4, 5}就是错的。请问对于任意的队列,最少要两两交换多少次,可以让其符合导游的要求?

输入:
输入有多组测试案例,每个测试案例为2行。
第一行包括一个整数n(2<=n<=200)表示人数,接下来一行包括n个整数a1, a2, …… an (1<=ai<=200) 表示n个员工初始的排列。

输出:
对应每个测试案例,按照导游的要求,输出最少需要两两交换的次数。

样例输入:
2
89 88
4
55 88 1 2
样例输出:
1
3
提示:
案例2中,最少需要移动三次:(55 88 1 2) -> (55 1 88 2) -> (1 55 88 2) -> (1 55 2 88)

 

思路:题不难,只是处理重复的最大值和最小值有点小技巧
AC代码:

#include<stdio.h>
#include<string.h>
#include<limits.h>
int a[300];
int main()
{
    int i,j,n,max,min,maxnum,minnum,t,sum;
    while(scanf("%d",&n)!=EOF)
    {
       maxnum=INT_MIN;minnum=INT_MAX;
       for(i=0;i<n;i++)
       scanf("%d",&a[i]);
       for(i=0;i<n;i++)
       {
          if(a[i]>=maxnum)
          {max=i;maxnum=a[i];}
          if(a[i]<minnum)
          {min=i;minnum=a[i];}
       }
       sum=0;
       if(n-1-max<=min)
       {
          for(i=max;i<n-1;i++)
          {
             t=a[i];
             a[i]=a[i+1];
             a[i+1]=t;
             sum++;
          }
          for(i=0;i<n;i++)
          {
             if(a[i]==minnum)
             {min=i;minnum=a[i];break;}//注意,这里加break的原因就是如果有两个以上相同的最小值,则选择最靠左的
          }
          for(i=min;i>0;i--)
          {
             t=a[i];
             a[i]=a[i-1];
             a[i-1]=t;
             sum++;
          }
          printf("%d\n",sum);
       }
       else
       {
          for(i=min;i>0;i--)
          {
             t=a[i];
             a[i]=a[i-1];
             a[i-1]=t;
             sum++;
          }
          for(i=0;i<n;i++)
          {
             if(a[i]==maxnum)
             {max=i;maxnum=a[i];}//注意,这里不加break的原因就是如果有两个以上相同的最大值,则选择最靠右的
          }
          for(i=max;i<n-1;i++)
          {
             t=a[i];
             a[i]=a[i+1];
             a[i+1]=t;
             sum++;
          }
          printf("%d\n",sum);
       }
    }
    return 0;
}
时间: 2024-12-31 01:13:30

九度1398:移动次数的相关文章

九度OnlineJudge之1014:排名

题目描述:                            今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完成的题数排序,没有考虑每题的分值,所以并不是最后的排名.给定录取分数线,请你写程序找出最后通过分数线的考生,并将他们的成绩按降序打印. 输入:                            测试输入包含若干场考试的信息.每场考试信息的第1行给出考生人数N ( 0 < N < 1000 ).考题数M ( 0 < M < = 10 ).分数线(正整

九度OJ 题目1510:替换空格

题目1510:替换空格 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:1697 解决:436 题目描述: 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 输入: 每个输入文件仅包含一组测试样例. 对于每组测试案例,输入一行代表要处理的字符串. 输出: 对应每个测试案例,出经过处理后的字符串. 样例输入: We Are Happy 样例输出: We%20Are%20H

算法-九度oj 题目1144:Freckles,不能通过,为什么超时间?

问题描述 九度oj 题目1144:Freckles,不能通过,为什么超时间? #include #include #include using namespace std; const int maxn = 5000; const double INF = 1000000000; bool vis[maxn] = {false}; double x[maxn],y[maxn]; int n ; int father[maxn]; struct Node{ double u,v; double c

年度中国最具创新性新媒体奖花落九度

照片中左一为九度无线传媒代表,公司品牌管理中心总监罗庆隆在领奖现场 在2008年1月9日,由中国广告网和央视市场研究(CTR)发起并联合主办的中国"首届新媒体年度盛典"上,在新媒体领域呼声很高的九度无线传媒,经过专家组的评审推荐,荣获组委会颁发的本届"年度中国最具创新性新媒体奖". 本届新媒体盛典的举办在中国尚属首次,其举办的背景是在继分众传媒.航美等为代表的新兴媒体成功崛起之后,带动了中国新媒体领域的大跃进,2006年.2007年涌现出一大批富于创意,具有代表性的

九度题目1120:全排列

题目1120:全排列  时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2749 解决:669 题目描述: 给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列. 我们假设对于小写字母有'a' < 'b' < ... < 'y' < 'z',而且给定的字符串中的字母已经按照从小到大的顺序排列. 输入: 输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间. 输出: 输出这个字符串的所有排列方式,每行一个排列.要求字母序比较小的排列在前

九度题目1107:搬水果

题目1107:搬水果 时间限制:1 秒内存限制:32 兆特殊判题:否提交:3463解决:1081 题目描述:     在一个果园里,小明已经将所有的水果打了下来,并按水果的不同种类分成了若干堆,小明决定把所有的 水果合成一堆.每一次合并,小明可以把两堆水果合并到一起,消耗的体力等于两堆水果的重量之和.当然经 过 n‐1 次合并之后,就变成一堆了.小明在合并水果时总共消耗的体力等于每次合并所耗体力之和.     假定每个水果重量都为 1,并且已知水果的种类数和每种水果的数目,你的任务是设计出合并的

人生九度

 1.工作方面,能力不敌态度: 2.事业方面,才华不敌韧度: 3.知识方面,广博不敌深度: 4.思想方面,敏锐不敌高度: 5.做人方面,精明不敌气度: 6.做事方面,速度不敌精度: 7.看人方面,外貌不敌风度: 8.写作方面,文采不敌角度: 9.方法方面,创意不敌适度

九度题目1110:小白鼠排队

题目1110:小白鼠排队 时间限制:1 秒内存限制:32 兆特殊判题:否提交:1348解决:820 题目描述: N只小白鼠(1 <= N <= 100),每只鼠头上戴着一顶有颜色的帽子.现在称出每只白鼠的重量,要求按照白鼠重量从大到小的顺序输出它们头上帽子的颜色.帽子的颜色用"red","blue"等字符串来表示.不同的小白鼠可以戴相同颜色的帽子.白鼠的重量用整数表示. 输入: 多案例输入,每个案例的输入第一行为一个整数N,表示小白鼠的数目. 下面有N行

九度题目1188:约瑟夫环

题目1188:约瑟夫环 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1500 解决:665 题目描述:     N个人围成一圈顺序编号,从1号开始按1.2.3......顺序报数,报p者退出圈外,其余的 人再从1.2.3开始报数,报p的人再退出圈外,以此类推.     请按退出顺序输出每个退出人的原序号. 输入: 包括一个整数N(1<=N<=3000)及一个整数p. 输出: 测试数据可能有多组,对于每一组数据, 按退出顺序输出每个退出人的原序号. 样例输入: 7 3 样例输出: