九度oj 题目1398:移动次数
2024-09-08 05:52:16
- 题目描述:
-
众所周知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)
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <algorithm> int main(int argc, char const *argv[])
{
int n;
while(scanf("%d",&n) != EOF) {
int min, max;
scanf("%d",&min);
max = min;
int mini = , maxi = ;
int temp;
for(int i = ; i < n; i++) {
scanf("%d",&temp);
if(min > temp) {
min = temp;
mini = i;
}
if(max <= temp) {
max = temp;
maxi = i;
}
}
int ans;
if(mini < maxi) {
ans = mini + n - - maxi;
}
else if(mini > maxi) {
ans = mini + n - - (maxi + );
}
printf("%d\n", ans);
}
return ;
}
最新文章
- 解决ArcGIS中因SDE或数据库配置问题而导致服务宕掉的一种思路
- FineReport中hadoop,hive数据库连接解决方案
- 重写Oracle的wm_concat函数,自定义分隔符、排序
- 使用CXF 来发布一个 service
- 网站性能评分工具Yslow 使用教程
- HDFS分布式文件系统设计思想
- notepad++ :正则表达式系统教程
- VS2010 发布网站时如何使DLL文件名固定
- Mac OS升级到Yosemite后一些问题
- =>; 朗姆达表达式带入符号
- MongoDB入门解析【学习记录】
- 转载--MYSQL5.7:Access denied for user &#39;root&#39;@&#39;localhost&#39; (using password:YES)解决方法
- python 统计单词个数,并按个数与字母排序
- python学习Day13 函数的嵌套定义、global、nonlocal关键字、闭包及闭包的运用场景、装饰器
- 百度地图支持https
- C/S,B/S的应用的区别
- 用VSCode的debugger for chrome插件调试服务器项目的配置方式
- js内存空间的那点事
- Mac安装MySQL数据库
- 【刷题】BZOJ 3495 PA2010 Riddle