【20231014算法进阶班】NOIP训练赛#20 赛后总结
做题历程
8:00 ~ 10:00
A看错题。
10:00 ~ 10:30
决定看B,想了一个假的贪心。
A细节写错,过不了大样例,疯。
10:30 ~ 11:20
写B暴力和贪心拼包。
过不了大样例,疯。
10:40 ~ 11:40
看了看C、D,写D暴力。
11:40 ~ 12:00
检查。
总结
-
要认真读题。
-
写代码要注意细节 \((\times 5\) 次\()\)。
-
要认真检查(D)。
题解
A
并查集板子。
注意已在同一联通块内的点不用在连边。
B
很难发现,每条边对于答案的贡献是 \(min(a_u,a_v)\)。
C
易证,最优情况是以 \(1\) 将整个区间分段,每段最优肯定是先删左右两边。
枚举哪个点最后删即可。
D
很巧妙的题。
首先每个球肯定是掉到他左右两边最近的洞。
设 \(x_i\) 表示他到他左边的洞的距离,\(y_i\) 表示他到他右边的洞的距离。
可以发现,如果一个球掉到左边,那么 向左移动 \(x_i\) 次的操作 一定先于 向右移动 \(y_i\) 次的操作。
不用建图,我们也可以发现如果对于两个球 \(i\) 和 \(j\),如果 \(x_i>x_j\) 并且 \(y_i<y_j\) 那么这两个球一定同时落到左边的洞,或同时落到右边的洞。
我们可以以 \(x_i\) 作为下标,得到一个 \(y_i\) 的序列,发现选取 本质不同的球掉进同侧的洞 的方案数的和 是上升子序列数。
\(BIT\) 优化即可。

浙公网安备 33010602011771号