avatar☀️
Number10Blog

Andrew N. Tang

Would I were the flowing river, That I might meet thee once more.

NOMURA2020 F - Sorting Game

Problme Statement

题意 ​

对于一个长度为 MM,值域为 [0,2N)[0,2^{N}) 的一个整数序列,

  • Alice 先进行若干次操作,每一次操作选择一位,将序列中 所有数 二进制下这一位的值变为 00。

  • Bob 接着可以进行若干次操作,每一次操作选择 相邻 两个数字,且这两个数字在二进制下有 恰好 一位不同,可以将这两个数交换。

求在可能的 2NM2^{NM} 种序列中,有多少种序列,满足无论 Alice 如何操作,Bob 总存在一种操作方式,使得最后序列不降?

对 109+710^{9}+7 取模。

1≤N,M≤50001\le N,M\le 5000

解法 ​

Hint ​

寻找充要条件,再进行 DP 计数。

Solution ​

每一对逆序对需要进行一次交换。考虑两个位置 xx 和 yy,满足在第 dd 位,xx 为 11 而 yy 为 00。如果有多个位满足 xx 为 11,yy 为 00,考虑最高的位。

我们断言,xx 和 yy 低于 dd 的位相等,是 Bob 能够操作成升序的充要条件。

充分性:比 dd 更高的位,若这些位 xx 小于 yy,则不满足逆序关系,无需考虑交换;若 xx 大于 yy,则 dd 不是最高的满足条件的位。所以更高位也是相等的,所以 xx 和 yy 只有一个位(即 dd)不同,可以交换。

必要性:如果 xx 和 yy 低于 dd 的位不相等,找到不相等的位,只要 Alice 不操作这一位,Bob 就无法交换 xx 和 yy,必定无解。

那么,容易发现,某一位 dd 第一个 11 到最后一个 00 之间的数,其低于 dd 的位均相等。

考虑 DP 计数。从高位考虑到低位,先考虑填最高位。最高位是形如

000...00 | 1?????0 | 11...111

即先是一段连续的 00,再是 11 和 00 中间随便包裹一些东西,最后是一段 11,可能没有第二段。

最高位填完之后,第二段后面的位要相等,不妨视作一个数,而第一段和第三段对后面的位没有限制,相当于一个子问题,所以考虑设 fi,jf_{i,j} 表示有 ii 位,长度为 jj 的序列的合法方案数。

转移枚举第二段长度 kk,系数有两部分:中间问号可以随便填,有系数 2k−22^{k-2}。第二段可以钦定开始位置,有 j−k+1j-k+1 种开始位置,有系数 j−k+1j-k+1,子问题为 fi−1,j−k+1f_{i-1,j-k+1}。

还有一种情况是没有第二段,这时候考虑最高位填多少个 00,有 j+1j+1 种方案。

故总转移式是

fi,j=(j+1)fi−1,j∑k=2jfi−1,j−k+1×2k−2×(j−k+1)f_{i,j}=(j+1)f_{i-1,j}\sum_{k=2}^{j}f_{i-1,j-k+1}\times 2^{k-2}\times (j-k+1)

这样可以做到 O(nm2)O(nm^2)

进一步地,后面一部分可以简单地使用前缀和进行优化,做到 O(nm)O(nm) 的复杂度,足以通过此题。

然而 wtc 有一种 O(n)O(n) 的做法…

Submission

虚树学习笔记
JOISC2017 E - 壊れた機器 (Broken Device)