ABC321

发布时间 2023-09-24 09:59:21作者: Akane_Moon

前言

感觉自从没了 \(\tt{EX}\) 后整体难度降了不少

A

模拟即可

B

观察到 \(n\le 100\),枚举答案验证即可,时间复杂度 \(O(100 \times n \log n)\)

C

手算一下可以发现满足条件的数字只有 \(1022\) 个,直接 \(\tt{dfs}\) 出所有答案并存储,排序并输出第 \(k\) 小即可

D

易得求 \(\sum_{i=1}^{n} \sum_{j=1}^{m} \min(a_i + b_j,P)\)

显然排序不影响答案,所以考虑对 \(a\)\(b\) 排序后对 \(b\) 做前缀和并二分查找 \(b\) 中第一个大于等于 \(P-a_i\) 的数的位置,通过前缀和计算答案即可,时间复杂度 \(O(n \log m)\)

E

发现建出来的树是一颗完全二叉树,考虑将答案分为两部分,即点自身的 \(k\) 儿子和与该点的父亲距离为 \(k\) 的点。

可是这两个部分存在交集,所以我们每次加上父亲结点的贡献时都要再减去点自身的 \(k-2\) 儿子。大眼观察得该完全二叉树的每一层的点都可以构成一个公差为 \(1\) 的等差数列,那么计算一个点的 \(d\) 儿子时(\(1 \le d \le k\)),可以找到 \(d\) 儿子中最左的结点 \(u\) 和最右的结点 \(v\)\(d\) 儿子的数量即为 \(v-u+1\)

注意当 \(k\) 大于两倍树高时无解,因为树的直径不可能超过两倍树高。时间复杂度 \(O(n \log n \log n)\)

F

可撤销背包板子,虽然我之前不知道有可撤销背包这么个东西

\(dp_i\) 为和为 \(i\) 的方案数,对于增加一个 \(x\),多出的方案数就是从 \(i-x\) 转移而来;对于减少一个 \(x\)\(i\) (\(x \le i\)) 在没有 \(x\) 之前的方案就是从 \(i-x\) 处没有使用的位置转移而来。

时间复杂度 \(O((k-x)^2)\)