20251104 正睿

正睿 NOIP 二十连测

C

image

\(n, q, a_i \le 300\)

这种题一般都要发现一些性质(不变量)才能做。这个题的是将 \(a\) 分成两组 \(S1, S2\) 的总和。

首先如果可以分成两组使得 \(s1 = s2\),那么后手必胜。

\(s1 = s2 = 0\) 显然成立。

否则先手选择了 \(S1\) 的元素,后手就选一个 \(S2\) 的元素,\(s1, s2\) 都减去了 \(\min(a_i, a_j)\)

然后猜剩下的就是先手必胜了。

\(s1 < s2\),后手肯定要想办法让 \(s1\)\(s2\) 变得相同。

设操作了 \(a, b(a \le b)\) 两个数组,那么操作相当于在原序列中删去 \(a, b\) 加入 \(b - a\)

暴力枚举 \(a, b, b - a\) 在哪个集合内讨论下就行了。(可钦定 \(a\)\(S1\)

接来问题就简单了,令 \(dp_{i, s}\) 表示前 \(i\) 个数能否凑出 \(s\),暴力转移即可。时间复杂度:\(O(qnV^2)\)

使用 bitset 优化达到 \(O(\frac{qnV^2}{w})\) 的复杂度。


这种题就是要找性质,感觉有点碰运气的成分。

posted @ 2025-11-04 22:58  xiehanrui0817  阅读(8)  评论(0)    收藏  举报