2020.10.25【NOIP提高A组】模拟

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 \times (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] \bigoplus a[j] \geq x)\)

但貌似只有\(30ptes\), 优化考虑把 1 ~ $ i - 1$ 转化二进制后加入 trie 内, 对于 trie 上的每个节点, 统计子树内的 f 值之和,

那么只需将 i 转化为二进制, 从高位到低位在 trie 上匹配, 设当前匹配到 u, 之前位的异或值为 \(s\), 对于当前位 \(c[k]\) 走左/右儿子(0/1)是否能取值 \(2^k\) 分别讨论

  1. \(s + 2^k \geq x\), 那么能取值的子树内显然可以任意匹配, 答案直接加上该子树内 f 值之和, s 不变, 向下 dg 到不能取值的子树内
  2. \(s + 2^k < x\), 那么不能取值的子树无论如何都无法匹配, 继续 dg 能取值的子树, \(s = s + 2^k\)

时间复杂度为 \(O(n log a)\)


T4.【2020.10.25提高组模拟】排列

暂时还不会唔

posted @ 2020-10-27 11:36  buzzhou  阅读(94)  评论(0编辑  收藏  举报