【20230924算法进阶班】NOIP训练赛#14 赛后总结

做题历程

8:00 ~ 8:40

看A做A

8:40 ~ 9:40

看B,C,打B题暴力,B想到了状压,认为时间复杂度没有前途,就去写C暴力.

9:40 ~ 10:40

看了看D,不会,去想B,C,感觉C可以搞.

10:40 ~ 11:40

写C.

11:40 ~ 12:00

检查

总结

  • 想到了的暴力最好实现一下.

  • 遇到期望不要直接跳过.

题解

A

dij裸题,没什么好说的.

B

很巧妙的dp.

将问题转化为一个 \(n * m\) 的矩阵,设 \(dp_{i,j,k}\) 表示考虑前 \(i\) 列,有 \(j\) 个右区间未被满足,有 \(k\) 列可选的方案数.

可以分 \(i+1\) 列是满足左区间还是满足右区间,计算贡献.

发现 \(k\) 可以由 \(i\)\(j\) 算出来.

C

发现 \(x\ xor\ y\)\(1\) 的个数的奇偶性只和 \(x\)\(y\)\(1\) 的个数的奇偶性有关.

有一个公式,即 \([1,x]\)\(1\) 的个数为奇数的数的数量为 \(\frac{x}{2} + (x\ mod\ 2\ ||\ popcount(x)\ mod \ 2)\),

\(popcount(x)\) 即为 \(x\) 在二进制下 \(1\) 的数量,c++函数为__builtin_popcount(x)

新加入一个区间 \([L,R]\) ,要求取并集,动态开点即可.

D

设一个人最后占有 \(x\) 个点,总方案数为 \(C_{n}^{x}\).

则占有一个点对的方案数为 \(C_{n-2}^{x-2}\), 概率 \(p = \frac{C_{n-2}^{x-2}}{C_{n}^{x}} = \frac{x(x - 1)}{n(n - 1)}\).

每个 \(Dis_i\) 对答案的贡献就是 \(sum_i * p\) , \(sum_i\) 即为树中长度为 \(Dis_i\) 的路径的条数.

点分治即可.

posted @ 2023-09-24 21:58  PeyNiKge  阅读(36)  评论(0)    收藏  举报