AtCoder Grand Contest 001 题解
2020.9.18 : Virtual Participation结果:过了ABCE。其中E的一个加强版在某"CSP模拟赛"见到过。
A
直接排序然后两两配对即可。
\(\Theta(n\log n)\) 或 \(\Theta(l_i)\)
B
考虑移动的过程,走两步之后就会变成在平行四边形里移动的问题。
我们记 \(solve(a,b)\) 为,我从一个 一对边长为a,另一对边长为b的平行四边形的一个顶点上出发,移动的总距离。
不难发现:
如果 \(a = b\) 则 \(solve(a,b) = a\)
如果 \(a < b\) 则 \(solve(a,b) = solve(a,b-a) + a*2\)
如果 \(a > b\) 则 \(solve(a,b) = solve(a-b,b) + b*2\)
不难发现这是个辗转相减的过程。辗转相除优化它即可。
\(\Theta(\log N)\)
C
考虑 DP . 最小化去掉的节点可以转化为最大化留下来的联通块大小。
记 \(f_{x,l}\) 表示,在x子树内部取一个包含x的联通块,满足其内部直径不超过k,并且从x往下的最长链为l的联通块的大小的最大值。
计算的时候直接类似树上背包转移即可,复杂度\(\Theta(N^2).\)
D
E
不难发现答案为 \(\sum\limits_{1\leq i < j \leq n} \binom{a_i+a_j+b_i+b_j}{a_i+a_j}\)
由于 \(\binom{a_i+a_j+b_i+b_j}{a_i+a_j}\) 是点 \((-a_i,-b_i)\) 到点 \((a_j,b_j)\) 只向右/上走的方案数,我们可以直接在平面上 DP 计算总共的方案数。
\(\Theta(max(a_i)\times max(b_i)+n).\)
好像还有一个\(\Theta((\sum a_i) + (\sum b_i) + n)\)的做法。