vp赛时通过六题。

M

考虑每个菜对人的贡献, 人不变, 那就让菜贡献尽量大。所以对于每个位置计算这个位置放辣菜可以被几个人吃, 从多往少选位置放辣菜就行。

J

显然在叶子节点考虑问题就可以了, 因为要是出去了总是会到叶子节点。
不难发现就是匹配叶子节点, 但是如果匹配的这两个叶子节点就是兄弟节点的话, 可以发现其实根本跑不动, 所以让叶子个数是 $a$, 子节点中叶子节点个数最大的那个点的子节点个数是 $b$,答案是 $\max ( \frac{a + 1}{2}, b ) $ 。

C

看到这个直接考虑数位 DP 就行了。

F

比较两个数可以利用前缀和差分就可以算出来。
$[p_l > p_r] = f(l, r) - f(l + 1, r) - f(l, r - 1) + f(l + 1, r - 1)$ 。
直接用这个排序次数会用多, 从左往右做插入排序可以减少一半询问, 就可以过了。

H

直接 dfs 就完事了。

I

可以发现, 一旦发生两个人重合, 那就直接走最短路。 所以答案一定是走到 $k$ 点范围内一个点, 然后走出去范围以后一路走最短路。 所以只需要在范围内跑 $dijskra$, 枚举中转点计算答案即可。