news 2026/6/25 18:46:56

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 N1iN,存在唯一一个j jj满足1 ≤ j ≤ N , i ≠ j , A i = A j 1\le j \le N, i\neq j, A_i=A_j1jN,i=j,Ai=Aj

小 A 希望每对相同的数字在序列中相邻,为了实现这一目的,小 A 每次操作会选择任意i ( 1 ≤ i ≤ N ) i(1\le i\le N)i(1iN),将当前序列的第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 N1iN,存在唯一一个j jj满足1 ≤ j ≤ N , i ≠ j , A i = A j 1\le j\le N,i\neq j,A_i=A_j1jN,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/6/25 9:26:22

Lambda多参数陷阱曝光:避免这3个常见错误,提升代码稳定性

第一章&#xff1a;Lambda多参数陷阱曝光&#xff1a;避免这3个常见错误&#xff0c;提升代码稳定性 在现代编程语言中&#xff0c;Lambda表达式因其简洁性和函数式编程能力被广泛使用。然而&#xff0c;当Lambda涉及多个参数时&#xff0c;开发者常因疏忽引入难以察觉的缺陷&a…

作者头像 李华
网站建设 2026/6/23 20:05:29

HeyGem系统自动调用GPU加速:无需手动干预即可提升处理速度

HeyGem系统自动调用GPU加速&#xff1a;无需手动干预即可提升处理速度 在数字人内容生产正从“能做”走向“快做、好做”的今天&#xff0c;效率成了决定产品生命力的关键。无论是教育机构批量生成AI讲师课程&#xff0c;还是媒体平台实时播报新闻&#xff0c;用户不再满足于“…

作者头像 李华
网站建设 2026/6/15 21:04:36

树莓派换源入门教程:图文并茂轻松学会

树莓派换源实战指南&#xff1a;从卡顿到飞速的系统加速术 你有没有遇到过这样的场景&#xff1f;刚拿到一台崭新的树莓派&#xff0c;兴致勃勃地插上电、烧好系统&#xff0c;准备安装第一个软件时&#xff0c;终端里却一行行缓慢滚动着&#xff1a; 0% [Connecting to arch…

作者头像 李华
网站建设 2026/6/10 13:31:24

带你了解pytorch,pytorch基本内容介绍

Pytorch作为深度学习库&#xff0c;常被使用。原因在于&#xff0c;pytorch代码更为简单。不管是深度学习新手还是老手&#xff0c;pytorch都是一大利器。为增进大家对pytorch的了解&#xff0c;本文将对pytorch的简单知识加以讲解。如果你对本文内容具有兴趣&#xff0c;不妨继…

作者头像 李华
网站建设 2026/6/15 20:59:30

你真的了解C#中的unsafe吗?一文看懂指针编程的利与弊

第一章&#xff1a;你真的了解C#中的unsafe吗&#xff1f;C# 作为一门以安全性和稳定性著称的高级语言&#xff0c;通常通过托管内存和垃圾回收机制来管理资源。然而&#xff0c;在某些特定场景下&#xff0c;开发者需要绕过这些限制以获得更高的性能或与非托管代码交互&#x…

作者头像 李华
网站建设 2026/6/20 10:48:00

树莓派5人脸追踪实战:PyTorch实时检测核心要点

树莓派5人脸追踪实战&#xff1a;PyTorch实时检测核心要点从一个“卡顿”的摄像头说起你有没有试过在树莓派上跑一个人脸检测模型&#xff0c;结果画面像幻灯片一样一帧一卡&#xff1f;明明代码逻辑没问题&#xff0c;但就是跟不上节奏。这正是我在搭建人脸追踪系统时遇到的第…

作者头像 李华