NOIP2025

T2

莽了 \(1.5h\) T2,幸好过了所有大样例。

讲一讲考场做法。

首先,可发现小 \(w\) 的这个策略其实已经比较优秀了,只有极少数情况不能达到要求。所以考虑容斥,用 \(2^n\) 减去不满足条件的方案数。

现在考虑啥时候不合法。从简单情况开始:\(m = 1\)(显然合法吧),然后就是 \(m = 2\)。此时只有一种情况:\(w = \{1, 2, 1\}\),小 \(w\) 选了两个 \(1\),但最优方案是选 \(2\)。然后发现 \(m \ge 3\) 都可以转化成前两种,所以只需要这种考虑 \(1, 2, 1\) 的情况即可。

注意只有这个结构出现在小 \(w\) 购买的最后才有贡献,也就是买到这里 \(m\) 只有 \(2\) 才行。


因为这个结构是关键的,考虑枚举里面的元素的出现位置。

\(a\) 从大到小排序,枚举 \(2\) 的位置 \(x\),枚举 \(2\) 前面的那一个 \(y\),如果 \(y < x\),那 \(a_y\) 都已经大于 \(a_x\) 了,肯定不会出现前面说的那种情况。

所以只需要考虑 \(y > x\) 的即可。枚举 \(y(2a_y > a_x)\),使用双指针可以找到最小的 \(z\),使得 \(a_y + a_z < a_x\),那么 \(a_{y + 1} \sim a_{z - 1}\) 都必须满足 \(w = 2\),而 \(a_{z + 1} \sim a_n\) 没有限制,用 \(2^{n - z}\) 的方案。

但是如何保证买到 \(a_y\) 时只有 \(2\) 块? 显然 \(x\) 前面的数无论如何都比 \(a_x\) 性价比高,也就是 \(w = 1/ 2\) 都可以,而 \(a_{x + 1} \dots a_{y - 1}\) 的只有 \(w = 1\) 才行。假设第一部分有 \(c_1\) 个,第二部分有 \(c_2\) 个,要凑出 \(m - 2\) 的方案数为:\(C_{c_1 + c_2}^{m - 2 - c_1}\),表示前 \(c_1\) 个每个减一块,然后等价于从 \(c_1 + c_2\) 个数中挑选 \(m - 2 - c_1\)\(w = 1\)。在这个题中 \(c_1 = x - 1, c_2 = y - x - 1\)

所以总方案数为 \(2^{n - z} \cdot C_{c_1 + c_2}^{m - 2 - c_1}\)

时间复杂度:\(O(\sum n^2)\),常数较小。

注意可能对于 \(x, y\) 不存在 \(z\) 使得 \(a_y + a_z < a_x\),这时相当于 \(a_y\) 后面的都必须是 \(w = 2\)。还有 \(y> x,a_x = a_y\) 时也是没有不行的。

posted @ 2025-11-30 10:31  xiehanrui0817  阅读(16)  评论(0)    收藏  举报