2020.10.25【NOIP提高A组】模拟
T1. 【2020.10.25提高组模拟】图
显然答案就是 (s) 到 (t) 的最短路 (dis[t]) (即最短路上至少要被断开一条边)
构造方案的话从 (s) 开始往外染 (dis[t]) 层色, 其他边填0就好
T2. 【2020.10.25提高组模拟】幂
80pts
答案显然为 (sum_{i = 1}^{n}{C_n^i imes (C_{n - i}^{(n - i) / 2} - C^{(n - i) / 2 - 1}_{n - i})} (2 | (n - i)))
T3.【2020.10.25提高组模拟】异或
一个比较显然的性质: 一个数异或的最小值只可能在排序后的相邻两项中取到
所以可以设 dp (f[i]) 表示以 i 结束的合法子序列的个数, 转移显然 :
(f[i] = 1 + sum^{i - 1}_{j = 1} f[j] (a[i] igoplus a[j] geq x))
但貌似只有(30ptes), 优化考虑把 1 ~ $ i - 1$ 转化二进制后加入 trie 内, 对于 trie 上的每个节点, 统计子树内的 f 值之和,
那么只需将 i 转化为二进制, 从高位到低位在 trie 上匹配, 设当前匹配到 u, 之前位的异或值为 (s), 对于当前位 (c[k]) 走左/右儿子(0/1)是否能取值 (2^k) 分别讨论
- (s + 2^k geq x), 那么能取值的子树内显然可以任意匹配, 答案直接加上该子树内 f 值之和, s 不变, 向下 dg 到不能取值的子树内
- (s + 2^k < x), 那么不能取值的子树无论如何都无法匹配, 继续 dg 能取值的子树, (s = s + 2^k)
时间复杂度为 (O(n log a))
T4.【2020.10.25提高组模拟】排列
暂时还不会唔