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)\)的做法。


F


posted @ 2020-09-18 20:41  srf  阅读(131)  评论(0编辑  收藏  举报