「考试」省选56
直接全都WA爆了。
T1
博弈论模型,其实就是转化成\(xor\)和为\(0\)。
我们考虑朴素的\(dp\),\(dp[i][j][k]\)设为前\(i\)个元素,去掉的元素个数\(mod\ d\)为\(j\),\(xor\)和为\(k\)的方案。
暴力转移即可。
考虑最终答案是\(dp[n][0][0]\)
我们降序排序\(\{a\}\)
那么如果\(upbit(a_i)=2^j\),说明转移过来的\(k\)必然是小于\(2^{j+1}\)的。
这样我们转移的时候就可以指转移\(2^{j+1}\)个。
那么复杂度就是\(O(d\sum\limits_{i=1}^{n}a_i)\)
T2
我们考虑设:
\(f[i][j][k]\)为中途不经过\(i,j\),以\(i\)为起点\(j\)为终点走了\(k\)步的方案数。
\(g[i][j][k]\)为以\(i\)为起点\(j\)为终点走了\(k\)步的方案数。
\(h[i][j][k]\)为中途不经过\(i,j\),以\(i\)为起点\(i\)为终点走了\(k\)步的方案数。
然后我们发现\(g\)可以直接暴力算,\(f\)和\(h\)都可以由\(f,g,h\)分别容斥出来。
式子是这样的。
注意容斥的时候特判\(i==j\)的情况。
然后\(f\)就是答案数组了。
T3
首先发现设\(f[i]\)为行的1的个数的奇偶性,\(g[i]\)为列的。
那么下一轮有:\(a[i][j]=f[i]\ xor\ g[j]\)
这样我们发现可以交换行列而不改变答案。
那么我们把矩形分成四块,分别统计答案即可。
可以发现每次迭代,四块的变化量是一样大的。
那么我们可以直接模拟这四块,然后用\(map\)判一下当前矩形是否出现过了即可。
至于如何求出初始答案。
直接线段树扫描线即可。