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$ 个后代的点。

可以发现,只有满足:

  1. $f_{S-1,u}=1$:令 $u$ 的后代都投 $u$,在 $S-1$ 的限制下可产生 $-1$ 的贡献。
  2. 对 $1\to u$ 链上的所有 $i$,$f_{S-1,i}$ 均不为 $0$:这个 $-1$ 的贡献不会被中途的 $0$ 吸收。
  3. $f_{S-1,1}=1$:加上这个 $-1$ 的贡献后,$f_{S-1,1}$ 可变为 $0$。

时,才可能使除 $u$ 外每个点都有不超过 $S-1$ 票,点 $u$ 才可以。

posted @ 2023-12-12 21:30  5k_sync_closer  阅读(7)  评论(0编辑  收藏  举报  来源