天坑。
AGC 057
C - Increment or Xor
题意:一个 \(0~2^n-1\) 的排列,每次可以全局 \(+1\) 或 \(\oplus x\),要还原排列。
从低到高位建 01 Trie,第 \(i\) 个叶子存着值为 \(i\) 的位置。
考虑两种操作:
- 操作 A:交换某些深度所有节点的左右儿子(即异或某个数)
- 操作 B:交换两个同父亲的叶子,同时不改变其他叶子的左右儿子关系(把这个叶子异或上某个数后挪到 \(2^n-1\) 去,然后 \(+1\) 来交换左右叶子)
操作 A 不会应用在最后一层(可以被 \(+2^{n-1}\) 替代),同时根据 \(i\) 所在位置与 \(i+2^{n-1}\) 所在位置的关系,可以确定每组左右叶子是否交换,即 B 操作已经固定了。
模拟完 B 操作后,最后再用 \(1\) 次 A 操作即可。
AGC 001
E - BBQ Hard
Xmas 2021
C - Count Me
题意:求 01 串序列 \(a_0,a_1,\dots,a_n\),其中 \(a_0\) 为空串,\(a_n\) 需匹配一个给定的模板串(由 01?$ 组成),\(a_i\) 在 \(a_{i-1}\) 的基础上插入 0 或 1,求方案数。
神题。
为了避免重复,可以规定只有以下 4 种操作:
- 开头插入 1
- 结尾插入 0
- 把 0 换成 01
- 把 1 换成 01
每个间隔插入个板子,共 \(n+1\) 个板子,每个板子打个时间戳 \(t_i\),那么最终 \(a_n\) 中,第 \(i\) 位为 0 代表 \(t_i<t_{i+1}\),为 1 则是大于,? 则随便。
以 ? 为分隔符,每一段单独算,那么就变成 LOJ 不等关系 了。设 \(f_i\) 表示到 \(i\) 的方案数,那么有:
\[f_i=\sum_{j=0}^{i-1} \frac{(-1)^{cnt_i-cnt_j}}{(i-j)!} f_j
\]
\(cnt_i\) 为 \(1 \sim i\) 中 \(>\) 个数。最后乘个 \(n!\) 之类的。
合起来多重集一下就行。可以分治 FFT 优化。时间复杂度 \(O(n\log^2 n)\)。