AtCoder Regular Contest 137 D

一道很好的题目,运用了很多不同的技巧。

结论1:枚举变换次数\(k\),若\(A_{i}\)对答案有贡献,当且仅当\(C_{n-i+k-1}^{k-1}\equiv 1 \mod 2\)

首先我们可以统计\(A_{p}\)对答案进行了多少次异或,这个可以使用DP计算:\(dp(i,j)\)为进行\(k\)次变换,第\(j\)个数中包含多少个\(A_{p}\)。转移就是\(dp(i,j)=\sum_{k<j} dp(i-1,k)\)。其中\(dp(0,p)=1\)

发现\(dp(i,j)=\sum_{k<j} dp(i-1,k)\)可以写成一个等价的转移:\(dp(i,j)=dp(i-1,j)+dp(i,j-1)\)。而这个是非常出名的网格图路径个数问题(\(n\)\(m\)列网格图,从左上到右下最短路共有\(C_{n-1+m-1}^{m-1}\)条),带入式子中就是\(C_{n-i+k-1}^{k-1}\)

异或具有自反性,故异或偶数次就没有对答案有贡献,所以若想对答案有贡献,则\(C_{n-i+k-1}^{k-1}\equiv 1 \mod 2\)

结论2:在杨辉三角上,\(C_{x}^{y}\equiv 1\mod 2\),当且仅当\(x\&y=y\)(这里&是二进制下按位与)。

证明要用到Lucas定理,\(C_{x}^{y}\%p\equiv C_{x/p}^{y/p} C_{x\%p}^{y\%p} \mod p\)

其实Lucas定理本质就是将两个数拆成\(p\)进制意义下计算,所以若有一位,\(x=0\)\(y=1\),则\(C_{x\%p}^{y\%p}\)就是\(0\),那么这整个式子就是\(0\)

所以若想让整个式子不为\(0\),则\(x\)的每个等于\(0\)的数位都要满足\(y\)中对应位也是\(0\)。换成二进制计算符表示就是\(x\&y=y\)

结论3:$(x+y)&y=y $

posted @ 2022-10-04 16:19  Nastia  阅读(40)  评论(0)    收藏  举报