【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\) 的路径的条数.
点分治即可.

浙公网安备 33010602011771号