第十届蓝桥杯大赛软件类省赛C/C++研究生组 试题I:灵能传输
在游戏《星际争霸 II》中,高阶圣堂武士作为星灵的重要 AOE 单位,在游戏的中后期发挥着重要的作用,其技能”灵能风暴“可以消耗大量的灵能对一片区域内的敌军造成毁灭性的伤害。
经常用于对抗人类的生化部队和虫族的刺蛇飞龙等低血量单位。
你控制着 n 名高阶圣堂武士,方便起见标为 1,2,⋅⋅⋅,n。
每名高阶圣堂武士需要一定的灵能来战斗,每个人有一个灵能值 ai 表示其拥有的灵能的多少(ai 非负表示这名高阶圣堂武士比在最佳状态下多余了 ai 点灵能,ai 为负则表示这名高阶圣堂武士还需要 −ai 点灵能才能到达最佳战斗状态)。
现在系统赋予了你的高阶圣堂武士一个能力,传递灵能,每次你可以选择一个 i∈[2,n−1],若 ai≥0 则其两旁的高阶圣堂武士,也就是 i−1、i+1 这两名高阶圣堂武士会从 i 这名高阶圣堂武士这里各抽取 ai 点灵能;若 ai<0 则其两旁的高阶圣堂武士,也就是 i−1,i+1 这两名高阶圣堂武士会给 i 这名高阶圣堂武士 −ai 点灵能。
形式化来讲就是 ai−1+=ai,ai+1+=ai,ai−=2ai。
灵能是非常高效的作战工具,同时也非常危险且不稳定,一位高阶圣堂武士拥有的灵能过多或者过少都不好,定义一组高阶圣堂武士的不稳定度为 maxni=1|ai|,请你通过不限次数的传递灵能操作使得你控制的这一组高阶圣堂武士的不稳定度最小。
输入格式
本题包含多组询问。输入的第一行包含一个正整数 T 表示询问组数。
接下来依次输入每一组询问。
每组询问的第一行包含一个正整数 n,表示高阶圣堂武士的数量。
接下来一行包含 n 个数 a1,a2,⋅⋅⋅,an。
输出格式
输出 T 行。
每行一个整数依次表示每组询问的答案。
数据范围
1≤T≤3,3≤n≤300000,|ai|≤109,
样例
输入样例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]传输灵能
1)假设a[i]>=0,则a[i-1]=a[i-1]+a[i],a[i]= -a[i],a[i+1]=a[i+1]+a[i]。考虑前缀和,思考便知:现s[i-1]=原s[i],现s[i]=原s[i-1],现s[i+1]=原s[i+1],故选取a[i]传输灵能的效果等同于把前缀和s[i-1]和s[i]交换。
2)假设a[i]<0,则a[i-1]=a[i-1]+a[i],a[i]=-a[i],a[i+1]=a[i+1]+a[i]。同样考虑前缀和,可得出和1)一样的结论。
综上:也就是说通过灵能的传输,可以得到任意的前缀和序列。而a[i]=s[i]-s[i-1],要想max(|a[i]|)也即max(|s[i]-s[i-1]|)最小,给s[i]数组排个序就好了。这一点很容易想到,你可以这样想:
假设有序序列: s1 s2 s3 s4 s5 s6 s7 s8 s9
s5乱序,序列变成:s1 s2 s5 s3 s4 s6 s7 s8 s9
观察改变后的差:s2-s1 s3-s2 s4-s3 s5-s4 s6-s5 s7-s6 s8-s7 s9-s8
s2-s1 s5-s2 s3-s5 s4-s3 s6-s4 s7-s6 s8-s7 s9-s8
不同的部分如绿色阴影部分,可以发现s5乱序后,绿色阴影的绝对值都增大了,这样整个序列的不稳定度可能会增加,有序序列更优。同理s5放在s7和s8之间情况同理。
实际情况下,s序列是由好几个乱序组成的,而不仅仅是一个s5。但无论怎样乱序,从上面例子可以看出,只要乱序存在就一定比有序的稳定性差。
如果s[i]都是可移动的,我们可以通过交换操作(类似冒泡排序)使得s数组有序。但是,这题并非如此,依据题目要求sn的位置是固定的,还有吗?还有s0。引入s0是为了求a1,因为a1=s1-s0=s1-0,所以s0=0.
假如排序后序列为:s1 s2 s3 s4 s5 s0 s6 s7 sn s8 s9 s10 s11,由于s0始终在第一个位置,sn始终在最后一个位置,我们可以把序列分为3个部分s1 s2 s3 s4 s5 s0 s6 s7 s8 sn s9 s10 s11,中间部分有序不用处理,现在只需处理绿色和蓝色部分,这两部分处理相同,所以只讲如何处理绿色部分。
s0 _ _ _ _ _ s6,我们的任务就是把s1-s5填充到横线5个位置。如果只有两个数s5,s4,一定是
s0 s4 _ _ _ s5 s6 接着
s0 s4 s2 _ s3 s5 s6 最后
s0 s4 s2 s1 s3 s5 s6
这样排列,序列的稳定性最好。
代码:
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<iostream>
#include<stack>;
using namespace std;
const int maxn=300000+10;
const int inf=0x3f3f3f3f;
typedef long long ll;
ll s[maxn],s_ord[maxn];
int vis[maxn];
int main()
{
int t,n,x;
scanf("%d",&t);
while(t--)
{
memset(vis,0,sizeof(vis));
scanf("%d",&n);
s[0]=0;
//int ans_test=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
//ans_test=max(ans_test,x);
s[i]=s[i-1]+x;
}
ll sr=0,ed=s[n];
int pos1,pos2;
if(sr>ed)swap(sr,ed);
sort(s,s+n+1);
for(int i=0;i<=n;i++)
{
if(s[i]==sr)
{
pos1=i;
break;
}
}
for(int i=0;i<=n;i++)
{
if(s[i]==ed)
{
pos2=i;
break;
}
}
int l=0,r=n;
for(int i=pos1;i>=0;i-=2)
{
s_ord[l++]=s[i];
vis[i]=true;
}
for(int i=pos2;i<=n;i+=2)
{
s_ord[r--]=s[i];
vis[i]=true;
}
for(int i=0;i<=n;i++)
{
if(!vis[i])
s_ord[l++]=s[i];
}
ll ans=0;
for(int i=1;i<=n;i++)
if(abs(s_ord[i]-s_ord[i-1])>ans)
ans=abs(s_ord[i]-s_ord[i-1]);
printf("%lld\n",ans);
}
return 0;
}
第十届蓝桥杯大赛软件类省赛C/C++研究生组 试题I:灵能传输的更多相关文章
- 2019 第十届蓝桥杯大赛软件类省赛 Java A组 题解
2019 第十届蓝桥杯大赛软件类省赛 Java A组 试题A 题解 题目最后一句贴心的提示选手应该使用 long (C/C++ 应该使用 long long). 本题思路很直白,两重循环.外层 ...
- 第十届蓝桥杯大赛-特别数的和-C++
解法一(暴力获取): #include<stdio.h> #include<stdlib.h> int main(void) { int n; ; ; printf(" ...
- 【第九届蓝桥杯大赛决赛真题】JAVA大学C组题解
有空就会更新.... 有的题目重复了:再另一篇帖子:https://www.cnblogs.com/dgwblog/p/9090923.html 02 结果填空(满分29分) 标题:海盗与金币 12名 ...
- 第十届蓝桥杯JavaC组省赛真题
试题 A: 求和 本题总分:5 分 [问题描述] 小明对数位中含有 2.0.1.9 的数字很感兴趣,在 1 到 40 中这样的数包 括 1.2.9.10 至 32.39 和 40,共 28 个,他们的 ...
- Java实现第十届蓝桥杯JavaC组第十题(试题J)扫地机器人
扫地机器人 时间限制: 1.0s 内存限制: 512.0MB 本题总分:25 分 [问题描述] 小明公司的办公区有一条长长的走廊,由 N 个方格区域组成,如下图所 示. 走廊内部署了 K 台扫地机器人 ...
- Java实现第十届蓝桥杯外卖店优先级
试题 G: 外卖店优先级 时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分 [问题描述] "饱了么"外卖系统中维护着 N 家外卖店,编号 1 ∼ N.每家外卖店 ...
- Java实现第十届蓝桥杯旋转
试题 F: 旋转 时间限制: 1.0s 内存限制: 512.0MB 本题总分:15 分 [问题描述] 图片旋转是对图片最简单的处理方式之一,在本题中,你需要对图片顺时 针旋转 90 度. 我们用一个 ...
- 第十届蓝桥杯2019年C/C++ 大学B组省赛试题
2019年第十届蓝桥杯大赛软件类省赛C/C++大学B组 试题 A:组队 本题总分:5分 [问题描述] 作为篮球队教练,你需要从以下名单中选出 1号位至 5号位各一名球员, 组成球队的首发阵容. 每位球 ...
- 2019第十届蓝桥杯C++B组题解(赛后重写的,不确保答案正确性,仅供参考)
先说一下这次的感受吧,我们考场比较乱,开始比赛了,还有的电脑有故障,(向这些人发出同情),第一次认真参加比赛,真正比赛的时候感觉没有那么正式,很乱,各种小问题,(例如博主就没找到题目在哪里,找到后又不 ...
随机推荐
- http cache & 浏览器缓存,存储位置的优先级,条件?
http cache & 浏览器缓存,存储位置的优先级,条件? memory cache disk cache 浏览器缓存,存储位置的优先级,条件, 机制,原理是什么? from memory ...
- UI & APP
UI & APP lanhu http://help.lanhuapp.com/hc/ http://help.lanhuapp.com/hc/kb/article/1173434/ 快速使用 ...
- search cascade select & AntD
search cascade select & AntD Antd https://ant.design/components/cascader-cn/#components-cascader ...
- html转png
/*海报弹窗2018-3-14*/.diglogimg{position: fixed;top:0;left:0;z-index: 99;width: 100%;height: 100%;backgr ...
- 【函数分享】每日PHP函数分享(2021-2-19)
array_diff_uassoc - 用用户提供的回调函数做索引检查来计算数组的差集 说明 array_diff_uassoc ( array $array1 , array $array2 , a ...
- 25_MySQL 数据操作语言:UPDATE语句
-- UPDATE 把每个员工的编号和上司的编号都加1,用 ORDER BY 完成 UPDATE t_emp SET empno=empno+1,mgr=mgr+1 ORDER BY empno DE ...
- springCloud服务流程
springCloud的服务流程:消费者调用生产者 1.通过接口化的请求调用(指定接口的服务名字和服务地址)只是做定义,并没有真正做到. 2.Feign组件,远程去注册中心找到服务的名字和服务的地址然 ...
- SpringBoot 整合 hibernate 连接 Mysql 数据库
前一篇搭建了一个简易的 SpringBoot Web 项目,最重要的一步连接数据库执行增删改查命令! 经过了一天的摸爬滚打,终于成功返回数据! 因为原来项目使用的 SpringMVC + Hibern ...
- Docker私有仓库的搭建与使用
目录 Docker搭建私有仓库 一.搭建registry私有仓库 1.拉取私有仓库registry镜像 2.启动私有仓库容器 3.修改deamon.json 4.重启docker 5.启动regist ...
- python爬取股票最新数据并用excel绘制树状图
大家好,最近大A的白马股们简直 跌妈不认,作为重仓了抱团白马股基金的养鸡少年,每日那是一个以泪洗面啊. 不过从金融界最近一个交易日的大盘云图来看,其实很多中小股还是红色滴,绿的都是白马股们. 以下截图 ...