NOIP 第十九次
备战 NOIP 2024!
A
容易发现只会操作前 $\left\lceil\dfrac n2\right\rceil$ 小的数,而需要使它们最终最大值最小,
设 $f_i$ 表示给一个数除以 $i$ 所需的最小代价,这个容易背包预处理出,
注意只需枚举倍数转移,所以复杂度是调和级数的。
二分答案,容易对每个数 $a_i$ 求出其至少需要除以 $b_i$,则其所需代价即为 $\min\limits_{j=b_i}^mf_j$,
检查所需的总代价是否不超过 $K$ 即可。
B
观察可知,对 $c_i$ 建 01Trie,对限制 $c_i\oplus x<K$,考虑 01Trie 上 $x\oplus K$ 这个数对应的路径,
对其中 $K$ 上对应位为 $1$ 的边,选择其兄弟边下方的子树,即可选出符合条件的所有 $c_i$。
将每个 $x\oplus K$ 插入 01Trie,类似线段树分治地,对每个叶子求出以其为路径终点的答案即可。
C
啥玩意,看不懂啊。
D
设 $f_{S,i}$ 表示限制每个点最多拿到 $S$ 票时,$i$ 的后代有多少个点需要把票投给 $i$ 的祖先,
对于一个 $S$ 容易 DP 出所有 $f_{S,i}$,于是可以二分出最小的 $S$ 使得 $f_{S,1}=0$(即存在合法方案),
此时有超过 $S$ 个后代的点一定可以,有少于 $S$ 个后代的点一定不行,只需考虑恰有 $S$ 个后代的点。
可以发现,只有满足:
- $f_{S-1,u}=1$:令 $u$ 的后代都投 $u$,在 $S-1$ 的限制下可产生 $-1$ 的贡献。
- 对 $1\to u$ 链上的所有 $i$,$f_{S-1,i}$ 均不为 $0$:这个 $-1$ 的贡献不会被中途的 $0$ 吸收。
- $f_{S-1,1}=1$:加上这个 $-1$ 的贡献后,$f_{S-1,1}$ 可变为 $0$。
时,才可能使除 $u$ 外每个点都有不超过 $S-1$ 票,点 $u$ 才可以。