以下是由icebound和phx写的hbcpc2018题解,有可能有错误。。
更新:标程已经上传,请访问:HBCPC2018标程
wordpress对markdown和latex支持有点差,不但把自适应给搞崩了,还出了各种bug,这里给出pdf下载地址(度娘网盘)。
链接:https://pan.baidu.com/s/18UgFvEYeAOY4dJoujFOy-w
密码:2zml
以下是正文:
520
直接输出2的N次方即可。
icebound的账单
简单模拟,从头到尾扫一遍,把所有的数加起来,判断是否比0大即可。时间复杂度。
Mex Query
从第一个数字开始扫描,维护一个数组,使得所有的为1,最后从开始扫描,找到第一个的,输出即可。时间复杂度
神殿
简单模拟。从区间枚举整数,每次计算每个数字含1的数量,找到符合题意的即可。时间复杂度。
跑图
BFS。将所有传送点当作起点放入队列进行BFS,处理出传送点到每个玩家的距离即可。时间复杂度。
icebound的商店
简单DP。观察可以发现物品的价格为斐波那契数列第项到第项,可以看作完全背包问题。设为购买商品价格为的方案数。则,其中w[j]为第个物品的价格。DP时注意取模。复杂度
Nim Game
博弈论+前缀和。由简单的博弈论知识可以得知,对于个数字的NIM游戏,后手必胜的状态为 xor xor xor 。只需要处理异或的前缀和,每次输出的值即可。
Bitmap
哈希。使用二维哈希预处理出两个矩阵的哈希数组,对于矩阵中所有的与大小相同的子矩阵 ,减去 (其中和是行与列的哈希字典集大小),得到矩阵的减去左上角的值的差分矩阵的哈希值,对做相同处理得到的差分矩阵.如果的哈希值与的哈希值相等,则可以认为是一个合法的答案。时间复杂度。本题数据范围较小,使用一维哈希逐行匹配也可以AC。
Defending Plan: Support
图论。最终答案的位置与边权无关,只看点权,树的加权重心即为答案。找到树的加权重心后dfs得到答案即可。证明参照树的重心:如果我的答案取在树的加权重心后,将答案从树的重心移动到任意一个子树中,答案均会增加,所以答案应该取在树的加权重心。
K Multiple Longest Commom Subsequence
动态规划。设表示串处理到位置,串处理到位置的答案。预处理出从串位置向前数,第个与位置数字相同的位置,用相同方式处理出B串的。
则转移方程为,其中第三种转移必须在的情况下转移。
Beautiful Array
组合数学。对分解质因数,得到个质因子,每个质因子的指数为,如果不考虑正负,对于每个质因子,可以看成有个相同的小球,放到个不同的盒子里的方案数。用组合数学知识求出方案数,利用乘法原理把他们乘起来,然后考虑正负号,乘上2^(y-1),得到最终答案。
Power Seq
如果在一个长度为 区间之内,存在一个数字管制这个区间,则第 大的数字必然为答案,从而该问题转化为求解一个区间的第 大的数字 以及 求解这个数字在该区间的出现次数的问题。
考虑用线段树维护值域,线段树上每一个点用 维护区间即可。
维护区间方法 : 在 里加入若干个线段,每个线段代表该区间的所有元素 , 删除 锁定区间,中间迭代删除,均摊分析复杂度:对于线段树上每一个点的 中,每个线段只会被删除一次,线段有 条。从而时间复杂度