CF1707
被姨妈客服薄纱了!
A \((\texttt{Easy} \ 2 / 0)\)
如果确定了 \(a_i > q\) 的次数,最优的策略肯定是把这样的 test 放到最后,进而我们可以得到最优策略:从某个后缀开始 test 所有比赛,\(n\) 天结束之后 IQ 恰好为 \(0\)。
可以二分,也可以倒着做,时间复杂度为 \(\mathcal{O}(n \log n)\) 或 \(\mathcal{O}(n)\)。
B \((\texttt{Easy} \ 2 / 0)\)
发现非 \(0\) 的数会很少,假设当前有 \(k\) 个 \(0\),那么前 \(k - 1\) 个 \(0\) 是不会动的,我们不用考虑它们,剩下的模拟即可。
时间复杂度 \(\mathcal{O}(n \log \max a_i)\)。
C \((\texttt{Easy} \ 2 / 1)\)
发现一个答案合法等价于以它为根时所有非最小生成树边在最小生成树上不是横叉边,所以子树打打标记就可以了。
时间复杂度 \(\mathcal{O}(n \log n)\)。
D \((\texttt{Easy} \ 3 / 1)\)
首先二项式反演把必须不等的条件去掉,然后设 \(f_{u, t}\) 表示以 \(u\) 为根的子树在 \(t\) 时刻之内删光的方案数。
一种操作方案合法当且仅当对于每一个点,它被删除时至多剩下一个子树没被删光,那么枚举一下是哪个子树,再枚举一下 \(u\) 是哪个时刻被删的,再加个前缀和优化就行了。
时间复杂度 \(\mathcal{O}(n^2)\)。
E \((\texttt{Medium} \ 4 / 1)\)
发现一个性质:如果我们把 \([l, r]\) 拆分成若干段区间 \([l_1, r_1], [l_2, r_2], \cdots, [l_m, r_m]\),那么对于 \(\forall k\),我们有
这个可以归纳证明,那么我们就可以 RMQ 在 \(\mathcal{O}(n \log^2 n) - \mathcal{O}(1)\) 地求出 \(f^{2^k}((l, r))\) 了,询问时直接倍增一下即可,注意特殊情况。
时间复杂度 \(\mathcal{O}(n \log^2 n + q \log n)\)。
F \((\texttt{Hard} \ 7 / 3)\)
好神仙的题目啊,每一步我都想不到。
与题面中不同,我们钦定所有下标从 \(0\) 开始。
首先,我们可以得到 \(c\) 和 \(a\) 的定量关系为
组合数 \(\bmod\ 2\) 引导我们往二进制位方面思考,我们不妨考虑一种特殊情况:\(n = 2^k\)。
此时若 \(t = n\),不难得到 \(c_i = 0\),所以对于所有 \(t \ge n\),\(c\) 合法当且仅当其中元素全部为 \(0\),只用考虑 \(t < n\) 的情况。
以下不区分数与其二进制下为 \(1\) 的位的集合,即 \(s \subseteq t\) 意味着 \(t\) 的二进制位包含 \(s\) 的二进制位。
当 \(t < n\) 时,一个数不可能走一圈再来贡献,所以我们有 \(c_i = \oplus_{s \subseteq t} a_{(i + j) \bmod n}\),我们尝试一些寻找一组解的方法。不妨对当前 \(t\) 的奇偶性进行分类讨论。
-
若 \(2 \mid t\),则所有的 \(s\) 都是偶数,即只有奇偶性相同的下标才能产生贡献。所以奇数下标和偶数下标就独立了,我们可以递归解决。
-
若 \(2 \nmid t\),则我们可以先对 \(a\) 进行一次操作,这样 \(a\) 就变为了 \(\{a_0 \oplus a_1, a_1 \oplus a_2, \cdots, a_{n - 1} \oplus a_0\}\)。此时可以继续递归下去,但是我们不能保证两边的解一定能够合并——我们需要两边的解的异或和相同。
这引导我们再加上一维记录异或和并进行 dp。
我们设 \(f(t, d, k)\) 表示有多少长度为 \(|d|\) 的序列 \(a\) 满足异或和为 \(k\),且经过 \(t\) 次操作后可以得到序列 \(\{c_{d_0}, c_{d_1}, \cdots, c_{d_{|d| - 1}}\}\)。根据上面的讨论,我们可以写出转移方程:
但是 \(w < 30\),我们并不能暴力去做异或卷积和点积。
再仔细观察一下,对于 \(k\) 这一维,dp 的初值有两种情况:只有一个位置为 \(1\);以及全部为 \(1\)。而我们的运算只有异或卷积和点积,不难发现对于 \(\forall t, d\),\(k\) 这一维只有三种情况:
- 全部为某个相等的值,且为 \(2^w\) 的幂次。
- 只有一个点的值非零,且为 \(2^w\) 的幂次。
- 全部为 \(0\)。
于是我们可以 \(\mathcal{O}(1)\) 地维护异或卷积和点积了。
至于修改操作,我们发现 \(d\) 的分裂就是 FFT 时做的分裂,所以我们可以把下标按位翻转之后用线段树维护。
至此,我们已经能够在 \(\mathcal{O}(n + (m + q) \log n)\) 的时间复杂度内解决 \(n = 2^k\) 时的问题。
对于 \(n\) 任意的情况,我们设 \(2^b \times r\),其中 \(2 \nmid r\),我们有结论:对于 \(t < 2^b\),设 \(c'_i = \oplus_{j \equiv i \pmod {2^b}} c_j \ (i = 0, 1, \cdots, 2^b - 1)\),那么 \(c\) 合法当且仅当 \(c'\) 合法。
证明:考虑对 \(c\) 进行 \(b\) 次上述分治,那么每一次都都是 \(2 \mid t\) 的情况,这显然是正确的,因为分治并没有用到 \(n\) 是 \(2\) 的幂次的性质。进而我们只用证明 \(n\) 为奇数的时候结论正确即可。\(t = 0\) 时显然;\(t > 0\) 时即证 \(c\) 合法等价于异或和为 \(0\)。这个条件是必要的,并且注意到异或和为 \(0\) 时因为 \(n\) 是奇数所以可以消元得到 \(t - 1\) 次操作后的序列,即前驱存在,所以也证明了充分性。
于是我们证明了这个结论。对于 \(t \ge 2^b\) 的情况,合法条件同理也是 \(c'\) 中的元素全部为 \(0\)。
于是我们在 \(\mathcal{O}(n + (m + q) \log n)\) 的时间复杂度内解决了原问题。

浙公网安备 33010602011771号