输入样例1:

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

输出样例1:

3
0
3

输入样例2:

3
4
-1 -2 -3 7
4
2 3 4 -8
5
-1 -1 6 -1 -1

输出样例2:

5
7
4

分析:这是一道思维跳跃性比较大的题目,比较难想到用前缀和来进行处理

假如我们要使得a[i]减少,根据题意可得,a[i-1]+=a[i],a[i]-=2a[i],a[i+1]+=a[i]对应到前缀和上就是

s[i-1]->s[i],s[i]->s[i-1],s[i+1]->s[i+1],相当于交换s[i]和s[i-1]的位置,那么也就是说我们每次对第i个数进行操作就相当于交换原始前缀和数组中的第i个数和第i-1个数,但是我们不能对第1个数和第n个数进行操作,也就是说我们在交换过程中不能涉及到s[0]和s[n],交换后前缀和数组相邻两个数的差即为答案数组,下面来看下怎样对前缀和数组进行排列,首先容易知道的是我们可以把s[1]~s[n-1]以任意的排列方式进行摆放(冒泡排序可以把任意的序列通过相邻两个数之间的交换而变成有序序列,则有序序列依旧可以通过相邻两个数之间的交换而变成任意序列)

首先s[0]和s[n]的位置是固定的,下面讨论以s[0]<s[n]的条件来进行讨论:

既然s[0]<s[n],则容易知道的是s[1]~s[n-1]中大于s[0]且小于s[n]的数一定排列在相邻的位置且单调递增(图中s0’到sn‘中的数),这个画个图很容易想到,

现在的关键就是我们对于那些小于s0以及大于sn的数怎样排列,这里我们先将那些数进行排列,然后间隔进行选取,最后再回来,举个例子,假如小于等于s0的数的从小到大排序后的序列为偶数,例如s5,s4,s3,s2,s1,s0,那我们的排列就是s0,s2,s4,s5,s3,s1,如果数目要是为奇数,例如s4,s3,s2,s1,s0,那我们的排列就是s0,s2,s4,s3,s1,同理,大于sn的数也是交叉进行选数,可以保证这样选取的数的相邻两个数的差的绝对值的最大值最小,下面给出证明:对于s5,s4,s3,s2,s1,s0,我们的排列就是s0,s2,s4,s5,s3,s1,假如s2与s4之间的距离为最大,那么我们要想减少此距离,必须要使s2走到s3再走到s4,也就是s2,s3,s4要连着,那么就有s5和s1连着或者s5和s0连着,这样会使最大距离变大,显然是矛盾的,所以可以反证得到这种排列方法是最优的。

下面是代码:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
#include<map>
#include<cmath>
#include<queue>
using namespace std;
#define int long long
const int N=300009;
int a[N],s[N],ans[N];
bool vis[N];
signed main()
{int T;cin>>T;while(T--){int n;cin>>n;s[0]=0;//初始化 for(int i=1;i<=n;i++)scanf("%lld",&a[i]),s[i]=s[i-1]+a[i];int s0=s[0],sn=s[n];if(s0>sn) swap(s0,sn);sort(s,s+n+1);for(int i=0;i<=n;i++)//找到s0的位置 {if(s0==s[i]){s0=i;break;}}for(int i=0;i<=n;i++)//找到sn的位置{if(sn==s[i]){sn=i;break;}}memset(vis,false,sizeof vis);int l=0,r=n;for(int i=s0;i>=0;i-=2)ans[l++]=s[i],vis[i]=true;for(int i=sn;i<=n;i+=2)ans[r--]=s[i],vis[i]=true;for(int i=0;i<=n;i++)if(!vis[i])ans[l++]=s[i];int anss=0;for(int i=1;i<=n;i++)anss=max(anss,abs(ans[i]-ans[i-1]));printf("%lld\n",anss);}return 0;
}

灵能传输(前缀和+贪心)相关推荐

  1. 灵能传输(前缀和 + 贪心)

    1248. 灵能传输 灵能传输 思路 1.观察发现每次对一个圣堂武士aia_{i}ai​一次灵能传输都是对前缀和Si−1S_{i - 1}Si−1​,SiS_{i}Si​得一次交换 2.问题转换为ma ...

  2. 灵能传输(贪心,前缀和)

    灵能传输 题目链接 在游戏<星际争霸 II>中,高阶圣堂武士作为星灵的重要 AOE 单位,在游戏的中后期发挥着重要的作用,其技能"灵能风暴"可以消耗大量的灵能对一片区域 ...

  3. 第十届蓝桥杯真题-灵能传输

    题目 OJ https://www.lanqiao.cn/problems/196/learning/ 考点 前缀和.贪心 思路 题目意思就是希望通过灵能交换后使得不稳定度最小,假设对a[i]进行灵能 ...

  4. 2019蓝桥杯B组省赛 J.灵能传输

    J.灵能传输: 是有几个难点的, 题意: n个数, 每次操作可以使 ai−1+=ai , ai−=2ai , ai+1+=ai, 问操作之后 |ai| 的最大值最小是多少 题解: 此题有三个难点:前缀 ...

  5. 2019蓝桥杯 C/C++ B组 J 题:灵能传输

    题目描述 题目背景 在游戏<星际争霸 II>中,高阶圣堂武士作为星灵的重要 AOE 单位,在 游戏的中后期发挥着重要的作用,其技能"灵能风暴"可以消耗大量的灵能对 一片 ...

  6. [蓝桥杯][2019年第十届真题]灵能传输

    个人题解链接,历届试题,正在更新中~ 题目描述 在游戏<星际争霸 II>中,高阶圣堂武士作为星灵的重要 AOE 单位,在 游戏的中后期发挥着重要的作用,其技能"灵能风暴" ...

  7. 蓝桥杯第十届省赛java组解析(灵能传输 四星难度,后缀表达式 两星难度)

    第一题太简单懒得复制题目了 答案是:490 第二题: 试题 B: 不同子串 本题总分:5 分 [问题描述] 一个字符串的非空子串是指字符串中长度至少为 1 的连续的一段字符组成 的串.例如,字符串aa ...

  8. 【题目】灵能传输(贪婪算法,蓝桥杯)

    [题目]灵能传输(贪婪算法,蓝桥杯) 这次我们来看一道题目,是来自第十届蓝桥杯C/C++和Java B组省赛最后一题. 由于题目有点长,这里只放出题目部分内容. 如图,位于题目结尾处提示了我们该题目输 ...

  9. 最大子矩阵(前缀和+贪心)

    题目描述 给定一个包含整数的二维矩阵,子矩形是位于整个阵列内的任何大小为1 * 1或更大的连续子阵列. 矩形的总和是该矩形中所有元素的总和. 在这个问题中,具有最大和的子矩形被称为最大子矩形. 例如, ...

  10. Maximize The Beautiful Value (前缀和贪心)

    Maximize The Beautiful Value (前缀和&贪心) 题目传送门 题意:给定长度为n不递减序列,求操作一次使其F[n]最大. #include<bits/stdc+ ...

最新文章

  1. 在Visual Studio中调试samples中可能出现的错误
  2. Two Paths CodeForces - 14D(暴力+树的直径)
  3. 线程同步(互斥锁、条件、读写锁、信号量)
  4. 关于工业级RS485串口服务器的组网方式详解
  5. php项目课题,php课题
  6. Web Reference和Service Reference的区别
  7. 字符串处理 —— 回文串相关 —— 求最长回文子串
  8. #从零开始学Swift2.0# No.4 枚举, 元组, 数组和字典
  9. Spring Boot基础学习笔记14:实现文件上传功能
  10. 区块链应用构建解决方案Reach拟于今年三季度在Algorand启动Balancer
  11. Awesome Go
  12. python应用-pycharm新建模板默认添加shebang编码作者时间等信息
  13. C/C++[算法入门]..
  14. 本机 Hosts 管理神器 SwitchHosts
  15. gels imagej 图片处理_科研论文作图之ImageJ
  16. 计算机专业该如何学习:准大一篇
  17. One Card Poker——AtCoder - abc054_a
  18. 整理了300个市面上最不常见的springboot计算机毕业设计选题。满满的干货
  19. 三行Python代码,实现数据库和excel之间的导入导出!
  20. 字体引入,不生效问题解决

热门文章

  1. android上传二进制流到服务器,android – 通过ADB shell传输二进制数据(即使...
  2. 关于《天上人间》的序与书评
  3. 申请OV、EV证书需要什么资料?邓白氏编码是什么?
  4. 《北京爱情故事》中《滴答滴》简谱
  5. 密码史简介(对称加密以解密)
  6. 如何检测iPhone 5(宽屏设备)?
  7. 数据库表中常用的查询实验
  8. 初识C语言(作者进阶版)
  9. 数据库的增删改查——自定义权限
  10. Android 解决小米和魅族不能在mac上调试