题意
对于一个长度为 ,值域为 的一个整数序列,
Alice 先进行若干次操作,每一次操作选择一位,将序列中 所有数 二进制下这一位的值变为 。
Bob 接着可以进行若干次操作,每一次操作选择 相邻 两个数字,且这两个数字在二进制下有 恰好 一位不同,可以将这两个数交换。
求在可能的 种序列中,有多少种序列,满足无论 Alice 如何操作,Bob 总存在一种操作方式,使得最后序列不降?
对 取模。
解法
Hint
寻找充要条件,再进行 DP 计数。
Solution
每一对逆序对需要进行一次交换。考虑两个位置 和 ,满足在第 位, 为 而 为 。如果有多个位满足 为 , 为 ,考虑最高的位。
我们断言, 和 低于 的位相等,是 Bob 能够操作成升序的充要条件。
充分性:比 更高的位,若这些位 小于 ,则不满足逆序关系,无需考虑交换;若 大于 ,则 不是最高的满足条件的位。所以更高位也是相等的,所以 和 只有一个位(即 )不同,可以交换。
必要性:如果 和 低于 的位不相等,找到不相等的位,只要 Alice 不操作这一位,Bob 就无法交换 和 ,必定无解。
那么,容易发现,某一位 第一个 到最后一个 之间的数,其低于 的位均相等。
考虑 DP 计数。从高位考虑到低位,先考虑填最高位。最高位是形如
000...00 | 1?????0 | 11...111
即先是一段连续的 ,再是 和 中间随便包裹一些东西,最后是一段 ,可能没有第二段。
最高位填完之后,第二段后面的位要相等,不妨视作一个数,而第一段和第三段对后面的位没有限制,相当于一个子问题,所以考虑设 表示有 位,长度为 的序列的合法方案数。
转移枚举第二段长度 ,系数有两部分:中间问号可以随便填,有系数 。第二段可以钦定开始位置,有 种开始位置,有系数 ,子问题为 。
还有一种情况是没有第二段,这时候考虑最高位填多少个 ,有 种方案。
故总转移式是
这样可以做到
进一步地,后面一部分可以简单地使用前缀和进行优化,做到 的复杂度,足以通过此题。
然而 wtc 有一种 的做法…