VP 2024 CCPC 哈尔滨
2024 China Collegiate Programming Contest (CCPC) Harbin Onsite (The 3rd Universal Cup. Stage 14: Harbin)
比赛链接
Problems | AC |
---|---|
A. Build a Computer | ⊕ |
B. Concave Hull | ⊕ |
C. Giving Directions in Harbin | ○ |
D. A Simple String Problem | |
E. Marble Race | |
F. 1D Galaxy | |
G. Welcome to Join the Online Meeting! | ○ |
H. Subsequence Counting | |
I. A Brand New Geometric Problem | |
J. New Energy Vehicle | ○ |
K. Farm Management | ○ |
L. A Game On Tree | ⊕ |
M. Weird Ceiling | ○ |
M
1 | void solve() { |
G
1 | void solve() { |
K 二分
按 w 从大到小排序,枚举操作的 i。那么比这个收益小的都卡底线。收益大的是一段前缀,二分这个前缀就做完了。
1 | void solve() { |
L TreeDP、期望
首先期望是假的,算总收益再除去方案数即可。
考虑拆下这个期望,平方拆开来是每个数的平方加上选两个项乘起来。
$$
\left(\left|e_1\right|+\left|e_2\right|+\ldots+\left|e_k\right|\right)^2=\sum_{i=1}^k\left|e_i\right|^2+\sum_{1 \leq i, j \leq k}\left|e_i\right| \cdot\left|e_j\right|
$$
这里的 $e_i$ 均为 $1$。
一种选法的贡献可以分为两种:
- 一种是由公共边 $e_i$ 产生的
- 一种是由有序对 $(e_i, e_j)$ 产生的
不妨设 $siz[u]$ 为 $u$ 的子树大小,$sum[u] = \sum_{v \in subtree_u}{(siz[v])^2}$。
分别讨论下这个贡献怎么算就行了,sol 写的很清楚了不再赘述
1 | void solve() { |
A 构造
唉唉 VP 的时候被这个痛苦折磨。构造解的时候不应该想着具体化的最优策略,应该好好想想形式化的表述的
1 | void solve() { |
VP 2024 CCPC 哈尔滨