news 2026/10/1 10:51:19

GESP认证C++编程真题解析 | P14917 [GESP202512 五级] 数字移动

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GESP认证C++编程真题解析 | P14917 [GESP202512 五级] 数字移动

​欢迎大家订阅我的专栏:算法题解:C++与Python实现!
本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战!

专栏特色
1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的代码实现与详细指导,帮助您夯实算法基础。
2.系统化学习路径:按照算法类别和难度分级,从基础到进阶,循序渐进,帮助您全面提升编程能力与算法思维。

适合人群:

  • 准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生
  • 希望系统学习C++/Python编程的初学者
  • 想要提升算法与编程能力的编程爱好者

附上汇总帖:GESP认证C++编程真题解析 | 汇总


【题目来源】

洛谷:[P14917 GESP202512 五级] 数字移动 - 洛谷

【题目描述】

小 A 有一个包含N NN个正整数的序列A = { A 1 , A 2 , ⋯ , A N } A=\{A_1,A_2,\cdots,A_N\}A={A1​,A2​,⋯,AN​},序列A AA恰好包含N 2 \frac{N}{2}2N​对不同的正整数。形式化地,对于任意1 ≤ i ≤ N 1 \le i \le N1≤i≤N,存在唯一一个j jj满足1 ≤ j ≤ N , i ≠ j , A i = A j 1\le j \le N, i\neq j, A_i=A_j1≤j≤N,i=j,Ai​=Aj​。

小 A 希望每对相同的数字在序列中相邻,为了实现这一目的,小 A 每次操作会选择任意i ( 1 ≤ i ≤ N ) i(1\le i\le N)i(1≤i≤N),将当前序列的第i ii个数字移动到任意位置,并花费对应数字的体力。

例如,假设序列A = { 1 , 2 , 1 , 3 , 2 , 3 } A=\{1,2,1,3,2,3\}A={1,2,1,3,2,3},小 A 可以选择i = 2 i=2i=2,将A 2 = 2 A_2=2A2​=2移动到A 3 = 1 A_3=1A3​=1的后面,此时序列变为{ 1 , 1 , 2 , 3 , 2 , 3 } \{1,1,2,3,2,3\}{1,1,2,3,2,3},耗费2 22点体力。小 A 也可以选择i = 3 i=3i=3,将A 3 = 1 A_3=1A3​=1移动到A 2 = 2 A_2=2A2​=2的前面,此时序列变为{ 1 , 1 , 2 , 3 , 2 , 3 } \{1,1,2,3,2,3\}{1,1,2,3,2,3},花费1 11点体力。

小 A 可以执行任意次操作,但他希望自己每次花费的体力尽可能小。小 A 希望你能帮他计算出一个最小的x xx,使得他能够在每次花费的体力均不超过x xx的情况下令每对相同的数字在序列中相邻。

【输入】

第一行一个正整数N NN,代表序列长度,保证N NN为偶数。

第二行包含N NN个正整数A 1 , A 2 , … , A N A_1,A_2,\ldots,A_NA1​,A2​,…,AN​,代表序列A AA。且对于任意1 ≤ i ≤ N 1\le i\le N1≤i≤N,存在唯一一个j jj满足1 ≤ j ≤ N , i ≠ j , A i = A j 1\le j\le N,i\neq j,A_i=A_j1≤j≤N,i=j,Ai​=Aj​。

数据保证小 A 至少需要执行一次操作。

【输出】

输出一行,代表满足要求的x xx的最小值。

【输入样例】

6 1 2 1 3 2 3

【输出样例】

2

【算法标签】

《洛谷 P14917 数字移动》 #二分# #GESP# #2025#

【代码详解】

#include<bits/stdc++.h>usingnamespacestd;constintN=100005;intn,a[N],maxn;// n: 数组元素个数, a: 存储数组, maxn: 最大值(代码中未使用)// 检查函数:验证是否能在限制x下使数组满足配对条件boolcheck(intx){intt=0;// 临时变量,用于记录当前等待配对的数字// 遍历数组中的每个元素for(inti=1;i<=n;i++){// 如果当前元素小于等于x,可以忽略if(a[i]<=x)continue;// 处理大于x的元素if(!t)// 如果t为0,表示没有等待配对的数字t=a[i];// 将当前数字设为需要配对的数字elseif(a[i]!=t)// 如果当前数字与等待配对的数字不同return0;// 无法满足条件,返回falseelse// 如果当前数字与等待配对的数字相同t=0;// 配对成功,重置t为0}// 如果最后t为0,说明所有大于x的数字都成功配对return1;}intmain(){cin>>n;// 输入数组长度// 读取数组元素for(inti=1;i<=n;i++)cin>>a[i];intl=1,r=100000;// 二分查找的左右边界,r设为最大值100000// 二分查找最小的xwhile(l<r){intmid=(l+r)/2;// 取中间值if(check(mid))// 如果mid满足条件r=mid;// 尝试更小的x,右边界缩小到midelsel=mid+1;// 否则需要更大的x,左边界增加到mid+1}cout<<l<<endl;// 输出最小满足条件的xreturn0;}

【运行结果】

6 1 2 1 3 2 3 2
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/29 9:31:24

C#指针编程避坑指南:using别名在unsafe代码中的妙用(仅限高手)

第一章&#xff1a;C#指针编程的高风险与高回报在C#开发中&#xff0c;指针编程属于非托管代码范畴&#xff0c;通常被用于性能敏感场景&#xff0c;如高频数值计算、图像处理或底层系统交互。启用指针需将代码标记为 unsafe&#xff0c;并配合编译器选项 /unsafe 编译。启用指…

作者头像 李华
网站建设 2026/9/29 9:16:32

[特殊字符]️删除当前视频功能:精准移除不需要的生成结果

删除当前视频功能&#xff1a;精准移除不需要的生成结果 在AI内容生成系统越来越普及的今天&#xff0c;一个常被忽视但至关重要的问题浮出水面——如何优雅地“删除”&#xff1f; 我们习惯于赞美生成速度有多快、口型同步有多准、语音自然度有多高。但很少有人关注&#xff1…

作者头像 李华
网站建设 2026/9/29 9:16:33

environment.yml文件是否存在?Conda虚拟环境还原

Conda环境还原&#xff1a;从environment.yml缺失看AI项目的工程化实践 在部署一个复杂的AI系统时&#xff0c;你是否遇到过这样的场景&#xff1f;项目文档写得清清楚楚&#xff0c;依赖列表也列了一大串&#xff0c;但当你一条条执行安装命令时&#xff0c;却频频卡在某个库的…

作者头像 李华
网站建设 2026/9/29 9:16:59

Twitter/X动态更新:HeyGem生成每日资讯快报

HeyGem数字人视频生成系统&#xff1a;自动化资讯播报的技术实践 在社交媒体内容爆炸式增长的今天&#xff0c;如何高效地生产高质量、个性化的短视频&#xff0c;已成为运营团队面临的核心挑战。尤其是在Twitter/X这类强调实时互动与信息密度的平台上&#xff0c;每日动态更新…

作者头像 李华
网站建设 2026/10/1 8:26:18

HTTPS加密访问HeyGem?Let‘s Encrypt证书申请指南

HTTPS加密访问HeyGem&#xff1f;Let’s Encrypt证书申请指南 在企业级AI应用逐步从实验原型走向生产部署的今天&#xff0c;一个常被忽视却至关重要的问题浮出水面&#xff1a;如何让本地运行的数字人系统看起来“足够专业”&#xff1f;比如&#xff0c;当客户第一次打开你的…

作者头像 李华
网站建设 2026/9/30 17:47:52

动漫人物视频适用HeyGem?真人优先,二次元效果一般

HeyGem 数字人视频生成&#xff1a;真人优先&#xff0c;二次元为何“水土不服”&#xff1f; 在短视频内容爆炸式增长的今天&#xff0c;AI驱动的数字人技术正以前所未有的速度渗透进内容生产链条。从在线课程到企业培训&#xff0c;从新闻播报到营销广告&#xff0c;越来越多…

作者头像 李华