【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\) 优化即可。

posted @ 2023-10-16 10:46  PeyNiKge  阅读(21)  评论(0)    收藏  举报