当前位置: 首页 > news >正文

[12月考试] E

[12月考试] E

题目描述

给定 nnn 个正整数 a1,a2,…,ana_1,a_2,\ldots,a_na1,a2,,an,小 E 可以进行若干次交换,每一次可以交换两个相邻的整数。

求小 E 至少要交换多少次,才可以让 a1a_1a1nnn 个数里的最小值,ana_nannnn 个数里的最大值,最小值和最大值可能不止一个。

对于所有数据,2≤n≤1052\leq n\leq 10^52n1051≤ai≤1091\leq a_i\leq 10^91ai109

输入格式

输入共 222 行。

111 行输入 111 个正整数 nnn

222 行输入 nnn 个正整数 a1,a2,…,ana_1,a_2,\ldots,a_na1,a2,,an

输出格式

输出共 111111 个整数,表示最小的交换次数。

样例 #1

样例输入 #1

5
1 2 3 4 5

样例输出 #1

0

样例 #2

样例输入 #2

7
4 4 4 3 2 2 2

样例输出 #2

7

提示

数据范围

对于 50%50\%50% 的数据,n,ai≤6n,a_i\leq 6n,ai6

对于额外 20%20\%20% 的数据,ai≤2a_i\leq 2ai2

对于所有数据,2≤n≤1052\leq n\leq 10^52n1051≤ai≤1091\leq a_i\leq 10^91ai109

🧠题目核心

  • 目标是让第一个元素是最小值之一,最后一个元素是最大值之一。
  • 可以交换相邻元素,每交换一次算1次。
  • 求最小交换次数。

✅问题点分析

  • 把最小值元素移动到第一个位置,交换次数 = 该元素的当前索引(因为每次交换往前移动1位)。
  • 把最大值元素移动到最后一个位置,交换次数 = (末尾位置索引 - 该元素当前索引)。

✅重要细节

  • 最小值选最左侧的最小值,因为想往前移,最左侧的最小值移动次数最少。
  • 最大值选最右侧的最大值,因为想往后移,最右侧的最大值移动次数最少。

✅特殊情况

  • 如果最大值的原始索引小于最小值的原始索引,则两者移动时不会发生冲突,交换次数直接相加即可。
  • 如果最大值的索引大于最小值索引,则在移动过程中,两者可能会“穿插”,相当于少交换一次,所以总次数要减1。

🚀 C++实现

#include <iostream>
using namespace std;int main() {int n;cin >> n;int a[100000];int minVal = 1000000001;int maxVal = -1;int minPos = -1; // 最左侧最小值位置int maxPos = -1; // 最右侧最大值位置for (int i = 0; i < n; ++i) {cin >> a[i];if (a[i] < minVal) {minVal = a[i];minPos = i;}if (a[i] >= maxVal) {maxVal = a[i];maxPos = i;}}int ans = minPos + (n - 1 - maxPos);if (minPos > maxPos) ans--;cout << ans << "\n";return 0;
}
http://www.dtcms.com/a/308385.html

相关文章:

  • 使用EasyPOI实现Java订单数据导出(含多物料信息)——模板语法详解与实战
  • Redis实战(4)-- BitMap结构与使用
  • uvicorn 启动重复加载 多次加载
  • 【LeetCode 热题 100】4. 寻找两个正序数组的中位数——(解法一)线性扫描
  • C++(模板)
  • java笔记——ConcurrentLinkedQueue
  • AUTOSAR进阶图解==>AUTOSAR_SRS_FunctionInhibitionManager
  • axios封装对比
  • 记录自己使用gitee和jenkins
  • PHP反序列化学习+解析+复现
  • 提升Windows操作效率:三款实用辅助工具功能解析​
  • 代码随想录Day35:动态规划(背包问题 二维 一维、分割等和子集)
  • Spring Boot整合MyBatis-Plus全攻略
  • 如何监控项目的每个阶段,提高执行效率
  • SchemaCrawler:一款免费开源的数据库文档工具
  • 斐波那契数
  • AI学习笔记三十三:基于Opencv的单目标跟踪
  • OpenCSG月度更新2025.7
  • leecode18 四数之和
  • 个股期权合约期内遇到标的停牌,如何处置?
  • DoRA详解:从LoRA到权重分解的进化
  • Redis线程模型讨论
  • 修改VSCode远程SSH的PATH
  • JVM字节码文件结构剖析
  • JVM学习日记(十二)Day12
  • 解释 MySQL 中的 EXPLAIN 命令的作用和使用场景
  • 格雷希尔G25F系列电气端口快速封堵接头,解决电池包、电机控制器等壳体的气密性测试难题,提升效率与可靠性,助力新能源汽车生产。
  • ARM--中断
  • 三坐标测量仪攻克深孔检测!破解新能源汽车阀体阀孔测量难题
  • 雷霆战机游戏代码