Coding Challenge Alpha VII(gym105348)
唉唉,闲的没事打了一下。
A
这是之前一个同学给我提过的问题,但我当时并没有认真想,现在随便想想就会了。
考虑总胜场数为 \(\dfrac{n(n-1)}{2}\),将这些胜场分配给 \(n\) 支球队,显然前三支分配尽量多的场,而后面平均分配即可。
B
很简单的组合数学,没啥思维含量。
C
很简单的题,但交了六发才过。
考虑将相同字母缩成一个点,然后建图跑 Floyd 即可。
D
数据范围明示直接 \(O(n^2)\) 建图,然后跑 dij 即可。
E
求直径的一种经典方法是树形 dp,这道题换根一下维护最大次大即可。
F
有点意思的题。
考虑对于一个序列它的答案就是最后一个值在整个序列中是第几大的。暴力的做法是扫描右端点来维护每个左端点的答案,对于某个左端点来说,其上的答案就是左右端点之间有多少数 \(\le\) 右端点上的数,不难发现发生变更的地方就是某一个 \(\le\) 右端点的左端点。运用一个 SDCPC 见过的技巧再加上倒序维护即可,线段树可以支持。