1 条题解
-
0
自动搬运
来自洛谷,原作者为

Sol1
博客:sol1.netlify.app搬运于
2025-08-24 22:44:00,当前版本为作者最后更新于2023-01-01 19:56:31,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
1C
考虑暴力 DP:
设 表示填到前 位,运算结果是 的方案数,结果大于 统一记为 (因为再接一位一定是 0)。朴素实现可得 24,精细实现可得 40。(事实上 40 分很提示正解)
考虑所有转移。对于 A:
- 所有数都可以往后接一个更小的数转移到 0。
- 1 可以接任意数转移到对应的数。
- 0 接任意数转移到 1。
- 其余转移不多。
对于 C:
- 所有数都可以往后接一个更小的数转移到 。
- 所有数都可以往后接自己转移到 。
- 所有数都可以往后接自己 +1 转移到自己 +1。
- 1 可以接任意数转移到该数。
- 其余转移不多。
这里会有几个重复转移(例如 会被多次转移),需要减掉。重复部分很少所以可以直接归到最后一类里面。
依次考虑每一种转移:
- 全局 ,单点修改
- 全局加
- 单点修改,单点求值
- 单点修改,单点求值
- 同 1
- 全局和,单点修改
- 整体向右平移一位
- 全局加
- 同 3
所以数据结构需要支持:
- 单点修改;
- 单点求值;
- 以下全局加;
- 以下全局和;
- 以下全局 ;
- 以下向右平移一位。
注意这个转移的过程中前一列的 DP 不能继承到后一列,所以还要支持:
- 以下全部清零。
使用一个 数据结构维护:保存 DP 数组 和一个时间标记数组 ,,,以及一个清零值 ,清零时间 ,整体加的值 。考虑所有操作:
- 单点修改:这里是单点加,下放标记(如果 ,将时间修改到 , 修改到 )之后直接改数组并对应更新 和 就行,。
- 单点求值:下放标记后返回 即可,。
- 全局加:修改 即可,。
- 全局和:返回 即可,。
- 全局 :返回 即可(注意 中 的系数是 ),。
- 向右平移一位:修改 的起始指针的位置(可以开一个两倍长的数组,初始把指针指在中间,这样每次直接自减 1 即可),并对应修改 和 即可,。
- 清零:将 设为当前时间, 设为 , 和 均设为 即可,。
最后一个运算符特殊处理,需要求组合数上指标前缀和或者下降幂底数前缀和,都是经典问题,可以 求。
所以这题就做完了。最后复杂度是 ,实际 时 A/C 转移分别只有 个,可以通过。
- 1
信息
- ID
- 8227
- 时间
- 3000ms
- 内存
- 512MiB
- 难度
- 7
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者