[HNOI 2013] 旅行 (数学)
感觉此题难啊,数学还是太渣了,看了半天的题解才算明白了点儿。
题目大意
给一个长度为n且仅由1和-1组成的序列ai, i = 1, 2, ..., n,每个位置都有另一个值vi,要求用某种方案将序列划分为m(0 < m < n)个非空连续子序列,使得所有子序列中和的最大绝对值最小,并且在所有满足上述条件的方案中划分位置的v[i]序列字典序最小。
猜想及证明
记
\(S_i = \sum_{j = 1}^{i}{a_j}\)
记题目中说的和的最大绝对值的最小值为
有如下几个结论
- 若
并且
,则
- 若
并且
,则
- 若
,则
证明:
- 第一条结论是显然的
- 对于第二条结论,首先可以肯定
,所以
。我们要证明对于和为零长度为n的序列,始终存在方案将其划分为i段(i = 1, 2,..., n),且每一段的和都是-1, 0, 1中一个(即
)。这样我们就能得到
。证明方法如下:
- 考虑将序列划分为n段,显然这是满足条件的,因为每一段的和都为1或-1
- 现在考虑将这n段中相邻的进行合并,由于整个序列的和为0,故一定能找到一对相邻的段,它们一个的和为-1,另一个为1,令它们合并后,新的段和为0,得到划分为n - 1段的方案
- 继续执行合并。由于整个序列和为0,每一段的和都为-1, 0, 1,所以只要序列中存在1,就一定存在-1,且始终存在相邻或中间仅隔着0的1和-1,且0可以任意合并,所以可以一直合并下去,直到最后仅剩下一个0,即为合并成一段的方案
- 对于第三条结论,如果
,我们可以肯定的是
。原因是如果每一段的和的绝对值都小于
,整个序列的和不可能为
。下面我们证明可以构造出
的方案。
- 如果
,相当于把一堆大小为
的物品分成
堆,只要保证尽量平均即可
- 如果
,由于需要保证每一段非空,我们要换一种方式考虑。考虑先取出
个位置,可以做到每一段和的绝对值都为1,也就是说,每一段中可一取出一个数使得剩余部分和为0,这就又变成上面的问题,已经证明对这些部分继续划分
,所以
- 如果
计算方案
这题思维难度很大,就算上面的结论猜到了,敢用了,想不出下面计算字典序最小的方案的算法也是没有用的。
对于并且
的情况,由于有且仅有前缀和为0的位置可选,我们仅需要维护一个单调队列,对第i个划分位置入队直到后面的前缀和为0的位置不足时为止,然后取出队中最小的即可。
对于其他情形,我们当前选择的位置受上一个位置限制。假设第个位置为
,给定另一个位置
,
可以作为第
个位置当且仅当
这个就有些难。我们对每个S值维护一个单调队列,得到第个位置
后,我们访问所有S值在
中的单调队列。
看起来是不是很暴力?似乎又要MLE又要TLE的样子?让我们仔细分析空间和时间复杂度,由于我们所有位置都最多入队一次,故空间复杂度为。因为
,总共选m次,故总的时间复杂度为
。
[HNOI 2013] 旅行 (数学)的更多相关文章
- 图论(网络流):[HNOI 2013]切糕
[HNOI 2013]切糕 第三题:切糕(程序文件名:cake.exe)100 分,运行时限:5s 经过千辛万苦小A 得到了一块切糕,切糕的形状是长方体,小A 打算拦腰将切糕切成两半分给小B.出于美观 ...
- [HNOI 2013]切糕
COGS 2398. [HNOI 2013]切糕 http://www.cogs.pro/cogs/problem/problem.php?pid=2398 ★★★☆ 输入文件:nutcake.i ...
- [BZOJ 3144][HNOI 2013] 切糕
题目大意 切糕是 (p times q times r) 的长方体,每个点有一个违和感 (v_{x, y, z}).先要水平切开切糕(即对于每个纵轴,切面与其有且只有一个交点),要求水平上相邻两点的切 ...
- [HNOI 2013] 消毒 (搜索,二分图匹配)
题目大意 一个a * b * c(a * b * c <= 5000)大小的长方体中有一些点需要被覆盖,每次可以选择任意大小的长方体,覆盖其中的点,产生的代价为这个长方体长宽高中最小的那个的长度 ...
- [HNOI 2013]数列
Description 题库链接 给你四个数 \(N,K,M,P\) ,让你生成一段长度为 \(K\) 严格单调递增序列,并且满足: 第一位可以为任意元素: 相邻两位的差值不超过 \(M\) : 序列 ...
- [HNOI 2013]游走
Description 题库链接 一个无向连通图,顶点从 \(1\) 编号到 \(N\) ,边从 \(1\) 编号到 \(M\) . 小Z在该图上进行随机游走,初始时小Z在 \(1\) 号顶点,每一步 ...
- [HNOI 2013]比赛
Description 沫沫非常喜欢看足球赛,但因为沉迷于射箭游戏,错过了最近的一次足球联赛.此次联 赛共N支球队参加,比赛规则如下: (1) 每两支球队之间踢一场比赛. (2) 若平局,两支球队各得 ...
- 【bzoj 2326】【HNOI 2011】数学作业
题解: 矩阵裸体. #include<cstdio> #include<cstring> #include<cmath> typedef long long ll; ...
- 解题:HNOI 2013 Cards
题面 除了不洗牌以外,每种洗牌方式的每个循环里的颜色必须一样,然后大力背包一下就好了.最后记得把不洗牌的方案也算进去 #include<cstdio> #include<cstrin ...
随机推荐
- linux怎么给一个普通用户reboot权限?
分四种情况讨论:1.让任何人(包括根本不拥有系统帐号的人)都可以通过控制台reboot在/etc/inittab文件中保留ca::ctrlaltdel:/sbin/shutdown -t3 -r no ...
- sass笔记-4|像写脚本一样写Sass,把能交给Sass办的都交给它
Sass笔记关于sass的基础部分已经写完,这一篇介绍Sass的高级特性--脚本特性.Sass能做很多事让样式表更智能,我们先会看到Sass眼中的数据类型,在这些数据类型上会有可进行的操作,此外,Sa ...
- 帧动画 AnimationDrawable
Drawable Animation(Frame Animation):帧动画,就像GIF图片,通过一系列Drawable依次显示来模拟动画的效果. 首先,在res/drawable中定义动画 < ...
- 手机端input,select屏蔽浏览器默认事件
文本框input:当文本框focus时会弹出软键盘,有时我们需要click事件而又不想触发focus事件(不要弹出软键盘) 给input添加 disabled="disabled" ...
- MongoDB与PHP的添加、修改、查询、删除
链接数据库使用下面的代码创建一个数据库链接 <?php$connection = new Mongo(); //链接到 localhost:27017$connection = new Mong ...
- Linux samba服务器设置简单匿名共享
linux下面的samba非常的好用,很多人拿它来作共享文件服务器, 缺省配置下,samba必须提供用户名密码来访问,如果是所有人都可以访问的内容,那么是比较麻烦的,其实通过一个设置,即可实现不用输入 ...
- Starting nagios:This account is currently not available nagios
nagios在启动时报错 # service nagios restartRunning configuration check…done.Stopping nagios: done.Starting ...
- 配置Windows Server 2008 允许多用户远程桌面连接
开启远程桌面后,远程访问windows server 2008服务器时,默认只支持一个用户名同时只能创建一个远程连接,新建连接登录后会将前一个就踢掉,有没有办法像windows server 2005 ...
- MySQL 列子查询及 IN、ANY、SOME 和 ALL 操作符的使用
列子查询是指子查询返回的结果集是 N 行一列,该结果通常来自对表的某个字段查询返回. 一个列子查询的例子如下: SELECT * FROM article WHERE uid IN(SELECT ui ...
- Js正则表达式提取图片地址
JavaScript使用正则表达式和Replace两种方法提取IMG标签图片地址,代码如下: /正则表达式 <script language="javascript"> ...