Solution Set -「NOIP Simu.」20221113
游戏
Cover:「ARC 087E」Prefix-free Game.
Tags:「A.博弈-SG 函数」「A.数据结构-Trie」
想了半天 () 怎么表述一堆字符串的前缀关系, 尝试发明一个数据结构 ... 我这不是个 Trie 吗? 乐.
建 Trie, 二人操作等价于在 Trie 上插入一个串, 并且要求串的末尾必须是新建的结点 (这样可能产生不合题意的前后缀关系, 但是此时 Alice Bob 在左右子树的选择是对称的, 可以忽略). 显然, 这些结点落在空子树内, 空子树间独立, 因此只需考察单个高度为 (设单点高度 ) 的空子树情况.
打表发现, , 异或判全局 SG, 结束. 归纳可证.
翻转
Cover:「CF 1630D」Flipping Range.
Tag:「C.性质/结论」
这题不简单啊 ... 恐怕又是什么常见结论重新推了一遍, 导致做得不快.
首先观察到, 若有长度为 的翻转区间, 则一定能够获得长度为 的翻转区间. 这是因为利用 的性质, 我们可以用一个 和一个 组合出任意位置开始的 . 进一步, 这是更相减损, 因此我们的实际可翻转区间长度就是 .
但是, 这个区间翻转也很麻烦, 直接 DP 状态量也很庞大, 怎么办呢?
我的赛上思路: 如果把翻转位置考虑作 向量, 我们有 个可用向量, 它们显然线性无关, 最终可能的符号序列对应于向量张成空间内的元素. 我们现在的问题是向量 " 太多", 翻转量大, 不好算. 那 ... 直接让相邻两个向量加一加? 得到 个形如 (中间一段有 个 ) 的向量. 空间少了一维? 最后补上 就能得到一样的张成空间. 由于张成空间相同, 这两组向量对应的最优解是相同的. 我们暴力枚举 用或者不用, 其他 个向量的影响对于下标 是独立的, 这就很好 DP 了.
有点机械, 但确实很长. 不过 这个结论后来想着组合意义还是比较明显的. 可能直接一步到位会更快一点吧.
总之, DP 一下就能 求解了. 瓶颈竟然是求 的 .
食尸鬼 *
Cover:「牛客 11251F」小红的食尸鬼.
Tags:「A.DP-动态 DP」「A.数据结构-线段树」
你要说我没做出来吧, 我很早就想到正解做法, 然后发现有 多种情况的表要打就想别的结论去了 ...
这题算个广义 DDP, 也就是以函数嵌套的形式构造有结合律的状态, 然后再用数据结构维护的 DDP. 注意到连续的亡语爆炸几乎就把随从炸平了, 因而 个的随从不会对爆炸状态产生影响. 对于每种输入类型, 一个区间需要维护出: 输出类型, 内部伤害, 存活随从数量, 对随从的伤害总数, 每种输入随从可额外造成的伤害一共 个信息. 这还没完, 有 种输入类型, 还需要对 S
, H
, A
分别写出转移信息组. 填写总共 个常量后就能愉快 DDP 啦! 复杂度大常数 .
计数 *
Cover:「ARC 086F」Shift and Decrement.
Tags:「C.思维」「C.性质/结论」
自从缩紧了“思维”这个 tag 的使用限制, 这样的死亡 tags 组合真的很少出现了. (
一个 key observation 是在最后一次 之前的其他 不用下取整. 因此, 前面的 和 可以一起打包为 . 如果一个位置 显然浪费了操作次数.
也就是说, 在 步以内, 假设总 次数 已知, 我们可以:
- 选一个 , 用 次操作令 .
- 用 次操作, 令 .
- 用 次操作, 令 .
直接枚举 吧, 注意第二步的取整与 的奇偶性有关. 设 , 这就和 与 的大小关系有关. 再枚举 与所有 的大小关系, 贪心地在大小关系不变的区间 内选择一个 最小的数 (这个可以 算啊, 我看有老哥写个数位 DP). 现在前两步的操作次数及其结果全被枚举出来了, 剩下 的范围自然也能求出来. 为了去重, 记录排序后的差分数组 一定时可能的 的区间集合, 对每种差分数组的区间求并再求长度和就是答案. 随便写写可以做到 .
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现