2025.4.1 CWOI 考试题解 A-C

T1 棋子

说实话题没看懂,看样例的答案发现 \(ans \times \text{inv}(n - 1) = \text{inv}(n(n - 1)) + 1\),解得 $ans = (n(n - 1) + 1) \times \text{inv}(n) $

T2 数列

之前做过弱化版,那个只要求 \(\Omicron(n \log V)\),这个要求 \(\Omicron(n)\)

正着难做就反着来,我们考虑怎么算不合法的方案数。发现这个也不好直接做,考虑容斥,设 \(dp _ {i,j}\) 表示填了 \(i\) 个数,有 \(j\) 段相同的的方案数,则答案为 \(\sum _ {i = 0} ^ {n - 1} (-1) ^ i \times dp _ {n,n - i}\),朴素转移就是 \(dp _ {i,j} = \sum _ {k = 0} ^ {i - 1} dp _ {k,j - 1} \times \min _ {t = k + 1} ^ i a _ t\)

这个只跟 \(j\) 的奇偶性相关,所以我们可以直接把 \(j\) 换成 \(0/1\),则 \(dp _ {i,j} = \sum _ {k = 0} ^ {i - 1} dp _ {k,j \oplus 1} \times \min _ {t = k + 1} ^ i a _ t\)

前面的可以前缀和优化掉,关键是怎么干掉后面的 \(\min\)。发现这个是有单调性的,可以用单调栈维护左边第一个小于 \(a _ i\) 的位置。对于一个 \(i\),如果栈是空的,那自己就是最小值,给 \(sum _ {i - 1,j \oplus 1}\) 乘上 \(a _ i\) 就可以。否则,设栈顶为 \(p\),则 \([p + 1,i]\) 都以 \(a _ i\) 为最小值,继承 \(dp _ {p,j}\) 的值,然后加上 \(sum _ {[p + 1,i],j \oplus 1} \times a _ i\)

最后根据 \(n\) 的奇偶性来考虑 \(dp _ {n,j}\) 的奇偶性,答案为 \(dp _ {n,0} - dp _ {n,1} \times (-1) ^ {n \bmod 2}\)

T3 数表

我们发现,如果填入 \(2n + 1\) 个不同的值,设异或和为 \(t\),异或上一个 \(x\) 后依然相互不同,答案变为 \(t \oplus x\)。所以说,\(q\) 的限制没用。

考虑满足前两个限制,我们用容斥,容斥上下两列有 \(c\) 列相同。则方案数为 $C _ {n} ^ {c} \prod _ {i = 2 ^ k - n + 1} ^ {2 ^ k - c} i $,加上容斥系数,答案为 \((\prod _ {i = 2 ^ k - n} ^ {2 ^ k} i)(\sum _ {i = 0} ^ n (-1) ^ i C _ n ^ i\prod _ {j = 2 ^ k - n + 1} ^ {2 ^ k - i} j)\),发现变化的项只有 \(2 ^ k - i\),在 \(i\) 改变时乘上变化量就行。

posted @ 2025-04-06 16:50  xguagua_233  阅读(13)  评论(0)    收藏  举报