D
Statement
合法序列 满足 。
的定义为:初始有 个标记,依次从 上移除一个标记( 则不做操作), 即为移除标记排列数。
给定 ,对于所有长度为 的合法序列 ,求 。答案对 取模。
Solution
正难则反,考虑对每一种标记移除排列方案,从后往前考虑每一个被移除的标记 ,设已经被移除的标记数为 ,其可能的被移除的方式有 种。对于整个排列方案,运用乘法原理即可。
令 dp[i][j] 为到位置 的标记,已经移除了 个标记的答案数,从后往前 dp 即可。
submission
E
Statement
给定一个长度为 的序列 和一个长度为 的序列 。要求增加 的值(可以不变)使得 b_i & b_{i+1} = a_i 并使得 的总增加量最小,求这个最小值。 。
solution
首先 一定是 的超集,只需要在 的基础上加位保证大于等于 且满足约束条件即可。
对于每一个 ,从高到低位扫描,若是 就跳过(不能做改动),若是 就考虑变 ,如果变之后大于等于 就将这个数加入候选列表里然后继续往下一位扫描,如果仍然小于就将这一位 固定下来(这一位若不为 ,如何改动后面的低位也无法让这个数大于 了)然后继续往后扫描,不难看出这一流程之后每个 可取的数的数量不会超过 ,然后dp即可。
submission