ABC397赛后总结

· · 学习·文化课

庆幸打了 unrated,惋惜没有做出E

A

B

C

D

发现直接枚举会爆时间和 long long,先优化精度问题。
发现所求可用立方差公式优化为 (x-y)\cdot(x^2+xy+y^2)=n
能够得到 (x-y)和(x^2+xy+y^2) 都是 n 的因数,所以直接枚举因数 c,时间 O(\sqrt n)

$$ \begin{aligned} c\times((y+c)^2 + y(y+c) + y^2) &= n \\ (y+c)^2 + y(y+c) + y^2 &= \frac n c \\ 3y^2 + 3cy &= \frac n c - c^2 \\ y^2 + cy &= \frac{\frac n c - c^2}{3} \end{aligned} $$ 得到 $y=\frac{-c + \sqrt{c^2+4t}}{2}$。 而又因为 $(x-y)$ 最多是 $\sqrt[3] n$,所以时间复杂度为 $O(\sqrt[3] n)$。 赛时没想到枚举到 $\sqrt[3] n$ 就可以,硬控半小时,最后还是试出来的。 ### E 树形DP可做。 发现要么是一条树链,要么是一条树上的路径,而且子树个数不大于2。 若子树个数为1,直接加;子树个数为2,两条链长度加1必为 $K$,转移很巧妙,见[炜哥代码](https://atcoder.jp/contests/abc397/submissions/63800231)。 赛时没做出来,惋惜痛恨之。 ### F 类似的题 [CF833B](https://codeforces.com/problemset/problem/833/B)。 线段树优化DP $$ 令f_{i,j} 表示划分成i层,到第j个点的最大价值\\ 易得转移方程f_{i,j}=\max_{k=1}^{j-1}{f_{i-1,k}+cnt_{k+1,j}} $$ 因为是max,所以可以考虑线段树维护这个东西,按 $i$ 枚举,每次到新的一层重新建树维护。 而F题就是 $K=3$ 时的结果。 赛时根本没看这道题,预估看了也写不出来。