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

第十五届蓝桥杯大赛软件赛省赛Python 大学 C 组:5.回文数组

题目1 回文数组

小蓝在无聊时随机生成了一个长度为 n 的整数数组,数组中的第 i 个数为 ai,他觉得随机生成的数组不太美观,想把它变成回文数组,也是就对于任意 i∈[1,n] 满足 a i = a n − i + 1 a_i=a_{n−i}+1 ai=ani+1

小蓝一次操作可以指定相邻的两个数,将它们一起加 1 或减 1;也可以只指定一个数加 1 或减 1,请问他最少需要操作多少次能把这个数组变成回文数组?

输入格式

输入的第一行包含一个正整数 n。

第二行包含 n 个整数 a1,a2,…,an,相邻整数之间使用一个空格分隔。

输出格式

输出一行包含一个整数表示答案。

数据范围

对于 20% 的评测用例,1≤n≤10。
对于所有评测用例, 1 ≤ n ≤ 1 0 5 , − 1 0 6 ≤ a i ≤ 1 0 6 1≤n≤10^5,−10^6≤a_i≤10^6 1n105106ai106

输入样例:
4
1 2 3 4
输出样例:
3
样例解释

第一次操作将 a1,a2 加 1,变为 2,3,3,4;

后面两次操作将 a1 加 1,变为 4,3,3,4。


思路

  1. +1的操作等价于-1,例如:1 2 3 4 ➡️1 2 2 1 or 1 2 3 4 ➡️4 3 3 4
  2. 那么我们只选择一种操作,-1
  3. 从两边分别统计差值,比如对于样例,0 0 1 2
  4. 遍历,进行-1操作,对于连续的两个位置-1,当做一次操作,最终结果为0 0 0 1
  5. 遍历最终位置为倒数第二个元素,此时如果倒数第一个元素不为0,单独进行-1操作

python代码

import os
import sys
n=int(input())
data=list(map(int,input().split()))
a=[0]*(n)
ans=0
l,r=0,n-1
while l<=n//2 and r>=n//2:
        t=min(data[l],data[r])
        data[l]-=t
        if l!=r:
            data[r]-=t
        l+=1
        r-=1
for i in range(n-1):
    t=data[i]
    if t>0:
        ans+=t
        data[i+1]-=min(t,data[i+1])
if data[n-1]>0:
    ans+=data[n-1]
print(ans)
        

知识点

蓝桥杯笔记:蓝桥杯备赛笔记

  1. 思维?贪心?回文数?

文章转载自:
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://www.dtcms.com/a/111422.html

相关文章:

  • 系统分析师-前6章总结
  • STM32单片机入门学习——第14节: [6-2] 定时器定时中断定时器外部时钟
  • PGSQL 对象创建函数生成工具
  • RSA和ECC在密钥长度相同的情况下哪个更安全?
  • 深度学习中的 Batch 机制:从理论到实践的全方位解析
  • AcWing 6118. 蛋糕游戏
  • Ubuntu安装Podman教程
  • Spring 核心技术解析【纯干货版】- XXI:Spring 第三方工具整合模块 Spring-Context-Suppor 模块精讲
  • 《古龙群侠传》游戏秘籍
  • 【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的监控:使用 Actuator 实现健康检查
  • 【spring cloud Netflix】Eureka注册中心
  • 关于uint8_t、uint16_t、uint32_t、uint64_t的区别与分析
  • Linux(2025.3.15)
  • 安装 TabbyAPI+Exllamav2 和 vLLM 的详细步骤
  • 前后端通信指南
  • C# Winform 入门(7)之简单的抽奖系统邮件
  • #管理Node.js的多个版本
  • 虚拟现实 UI 设计:打造沉浸式用户体验
  • MINIQMT学习课程Day10
  • 欧几里得算法求最大公约数、最小公倍数
  • chromium魔改——CDP(Chrome DevTools Protocol)检测01
  • CCF GESP C++编程 八级认证真题 2025年3月
  • MySQL 性能调优:数据库的极限运动训练
  • [ deepseek 指令篇章 ]300个领域和赛道喂饭级deepseek指令
  • 【数论】 质数
  • 【已解决】Webstorm 每次使用 git pull/push 都要输入令牌/密码登录
  • RFC6937 PRR 的兑换细节
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——
  • AWS数据分析全栈实战(Redshift+SageMaker)
  • MYOJ_4576:(洛谷P1032)[NOIP 2002 提高组]字串变换(BFS提高)