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 $
浙公网安备 33010602011771号