感谢大佬的讲解:

第十届蓝桥杯题目讲解(Java B组 IJ,C++ B组 BGH,C++/Java A组 CEHIJ)_哔哩哔哩_bilibili

题目描述

你控制着 nn 名高阶圣堂武士,方便起见标为 1,2,··· ,n。每名高阶圣堂武士需要一定的灵能来战斗,每个人有一个灵能值 a_iai​ 表示其拥有的灵能的多少,a_iai​非负表示这名高阶圣堂武士比在最佳状态下多余了 ai​ 点灵能,ai​ 为负则表示这名高阶圣堂武士还需要 ai​ 点灵能才能到达最佳战斗状态)。

现在系统赋予了你的高阶圣堂武士一个能力,传递灵能,每次你可以选择一个 i ∈ [2,n−1]i∈[2,n−1]​,若 ai​​ ≥ 0 则其两旁的高阶圣堂武士,也就是 i−1、i + 1​ 这两名高阶圣堂武士会从 ii​这名高阶圣堂武士这里各抽取 ai​ 点灵能;若 ai​<0​ 则其两旁的高阶圣堂武士,也就是 i−1,i+1 这两名高阶圣堂武士会给 i 这名高阶圣堂武士 −a​​ 点灵能。形式化来讲就是 ai−1​+=ai​,ai+1​+=ai​,ai​−=2ai​​。

灵能是非常高效的作战工具,同时也非常危险且不稳定,一位高阶圣堂武士拥有的灵能过多或者过少都不好,定义一组高阶圣堂武士的不稳定度为 \max_{i=1}^{x}|a_i|maxi=1x​∣ai​∣,请你通过不限次数的传递灵能操作使得你控制的这一组高阶圣堂武士的不稳定度最小。

输入描述

本题包含多组询问。

输入的第一行包含一个正整数 TT 表示询问组数。 接下来依次输入每一组询问。

每组询问的第一行包含一个正整数 nn,表示高阶圣堂武士的数量。

接下来一行包含 nn 个数 a_1,a_2,··· ,a_na1​,a2​,⋅⋅⋅,an​。

其中,T≤3,3≤n≤300000,∣ai∣≤10^9

样例输入

3
3
5 -2 3
4
0 0 0 0
3
1 2

样例输出

3
0
3

思路:

题目给定我们一个数组,要求我们通过多次操作后使得这个数组的最大值最小。这个操作题目中也有介绍,就是选中除去首尾数组的一个数,使得ai−1​+=ai​,ai+1​+=ai​,ai​−=2ai​​。

所有的加减操作都是在数组内部进行的,对数组和不会有影响,所以我们可以用前缀和对这个操作进行简化。

  • a[i−1]​​​ 更新为 a[i] + a[i-1]a[i]+a[i−1]​​,那么 s[i-1]s[i−1]​ 的新值等于原来的 s[i]s[i];
  • a[i]a[i] 更新为 -2a[i]−2a[i],那么 s[i]s[i] 的新值等于原来的 s[i-1]s[i−1];
  • a[i+1]a[i+1] 更新为 a[i] + a[i+1]a[i]+a[i+1], s[i+1]s[i+1] 的值保持不变。

经过一次操作后,s[i]s[i]​​​​​ 和 s[i-1]互相交换,s[i+1]​​​​​ 不变。而 s[i-1]、s[i]​​​​​、s[i+1]​​​​​ 这 3​​​​​ 个数值还在,没有出现新的数值。设 a[0] = 0,观察前缀和数组 s[0]​​​​​、s[1]​​​​​、s[2]​​​​​、⋯​​​​​、s[n−1]​​​​​、s[n]​​​​​。除了s[0]​​​​,s[n]​​​ 外,其他的 s[1]​、s[2]、⋯、s[n-1]s[n−1],经过多次操作后,每个 s[i]s[i] 能到达任意位置。而我们所求的最小的最大值a[i]可以通过s[i]-s[i-1]求得。

为了让操作后的s[]数组的max(s[i]-s[i-1])最小,就是使得相邻的s[i]相差最小。因为我们的a[0]和a[n]是不可以改变的,所以分为两种情况:

一:

s[0] 是最小的,s[n] 是最大的。 我们把 s[]s[] 排序后,max{|s[i]-s[i-1]}就是解了。

二:

当s[0]不是最小值,s[n]也不是最大值。

首先我们要保证s[0]<s[n],如果不符合则交换他俩的值。

因为s[0]和s[n]是不变的,所以我们发现先从s[0]到min,再从min到max,最后从max到s[n]这样的走法使得相邻的s[i]最小。

如图

将上图的点压倒y轴上可以得到这样的图

之后我们发现隔一个点蹦的方法可以使得相邻的s[i]的差最小,是一组最优解。这样操作后,得到了新的前缀和数组,此时的前缀和数组的差的最大值就是我们的答案

T=int(input())
for p in range(T):n=int(input())a=list(map(int,input().split()))s=[0]+afor i in range(1,n+1):s[i]+=s[i-1]sn=s[n]s.sort()a=[0 for i in range(n+1)]s0=0if s0>sn:sn,s0=s0,snfor i in range(n+1):if s[i]==s0:s0=ibreakfor i in range(n,-1,-1):if s[i]==sn:sn=ibreakl=0r=na[n]=s[n]vis=[True for i in range(n+1)]for i in range(s0,-1,-2):a[l]=s[i]vis[i]=Falsel+=1for i in range(sn,n+1,2):a[r]=s[i]vis[i]=Falser-=1for i in range(n+1):if vis[i]:a[l]=s[i]l+=1res=0for i in range(n):res=max(res,abs(a[i+1]-a[i]))print(res)

蓝桥杯-灵能传输-python相关推荐

  1. 第十一届蓝桥杯青少组Python竞赛真题

    第十一届蓝桥省赛Python组复盘 第十一届蓝桥省赛Python组复盘_哔哩哔哩_bilibili 蓝桥杯青少组Python竞赛真题讲解 蓝桥杯青少组Python竞赛真题讲解_哔哩哔哩_bilibil ...

  2. [蓝桥杯]横向打印二叉树 Python满分解法

    [蓝桥杯]横向打印二叉树 Python满分解法 #树的结点类定义 class Node:def __init__(self,left=0,right=0,w=0,line=0,leng=0):self ...

  3. 蓝桥杯 蓝肽子序列 python(2020动态规划)

    蓝桥杯 蓝肽子序列 python(2020动态规划) 题目描述 L 星球上的生物由蛋蓝质组成,每一种蛋蓝质由一类称为蓝肽的物资首尾连接成一条长链后折叠而成. 生物学家小乔正在研究 L 星球上的蛋蓝质. ...

  4. 蓝桥杯-幸运数(python)

    蓝桥杯-幸运数(python) 一.题目 时间限制: 1Sec 内存限制: 128MB 题目描述: 幸运数是波兰数学家乌拉姆命名的.它采用与生成素数类似的"筛法"生成 . 首先从1 ...

  5. 蓝桥杯 ALGO-1005 数字游戏 python

    蓝桥杯 ALGO-1005 数字游戏 python 试题 算法训练 数字游戏 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个1-N的排列a[i],每次将相邻两个数相加,得到 ...

  6. 【蓝桥杯】承压计算python实现

    [蓝桥杯]承压计算python实现 笔者第一次写博客,如有错误,欢迎指正. 原题如下: X 星球的高科技实验室中整齐地堆放着某批珍贵金属原料.每块金属原料的外形.尺寸完全一致,但重量不同. 金属材料被 ...

  7. 2022年(第13届蓝桥杯省赛)Python 14 天夺奖冲刺营

    2022年(第13届蓝桥杯省赛)Python 14 天夺奖冲刺营 2022.03.25 攒了一周的视频直播没有看,更新完了直接看合集. 数据结构基础之链表篇 什么是链表 链表是线性表的链式存取的数据结 ...

  8. 【蓝桥杯考前一天总结PYthon终结篇】

    最短路之Floyd: 适用领域:既可以是有向图也可以是无向图,权重可以为负,通常用来求各顶点之间的距离(多源) 缺点就是时间复杂度高,加上Python本身跑得慢....就祈祷这次题数据量不要太大 优点 ...

  9. 蓝桥杯练习之用Python解手算题

    编译环境:Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)] on win32 代码用no ...

最新文章

  1. Windows 软件授权管理工具检验Windows7激活状态和许可证详细信息
  2. 关于HTML的面试题-html4/css2篇
  3. Debit and Credit Memo
  4. linux设置程序循环,linux shell编程学习笔记(7)流程控制之循环结构
  5. mysql的两种存储方法_mysql的两种存储引擎
  6. 交换机 路由器 OSI7层模型
  7. js将人民币小写金额转换为大写
  8. 伪随机生成器具体实现——密码法
  9. 多边形的凹凸性判断及python实现
  10. 他安息,只因天使离去
  11. java lazy_在Java8中模拟Lazy
  12. 任泽平:中国收入分配报告2021最新白皮书
  13. 编写PC操作系统的参考资料(不断更新)
  14. 【车牌识别】RGB颜色模型车牌识别【含GUI Matlab源码 888期】
  15. APP实用开发—自定义加载动画
  16. Discover Your Missed ASM Disks
  17. 魔兽地图编辑器实现英雄选择的四种方法
  18. 边际生产力理论(转载)
  19. 【行业动态】福建服装品牌如何完成差异化战略?
  20. ueditor编辑器 字数统计 不算空格 以及 过滤粘贴板格式

热门文章

  1. 主流视频通话SDK比较
  2. unity项目:坦克大战:炮弹预设体
  3. 马斯克:推特要学习微信,让10亿人「活在上面」成为超级APP
  4. 大专计算机两年好还是三年好,同样是大专学历,3年制和5年制差距明显,其实应该早知道...
  5. linux 查看文件的换行符 回车 换行
  6. 2019暑假牛客第5场-F.maximum clique 1-最大独立集(输出方案)
  7. 大班科学计算机的发明应用教案,大班科学活动教案:有用的工具
  8. native转ascii工具(复制成html文件即可用)
  9. Multi-Paxos协议日志同步应用
  10. 在Word2013中如何将PDF文件转换为Word文件