码迷,mamicode.com
首页 > 其他好文 > 详细

「考试」省选56

时间:2020-03-28 21:39:11      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:暴力   map   1的个数   博弈论   出现   如何   limit   说明   bit   

直接全都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\)分别容斥出来。
式子是这样的。

\[g[i][j][k]=\sum\limits_{e(t,j)}g[i][t][k-1] \]

\[f[i][j][k]=g[i][j][k]-\left(\sum\limits_{d=1}^{k-1}f[i][j][d]g[j][j][k-d]+\sum\limits_{d=1}^{k-1}h[i][j][d]g[i][j][k-d]\right) \]

\[h[i][j][k]=g[i][j][k]-\left(\sum\limits_{d=1}^{k-1}h[i][j][d]g[i][i][k-d]+\sum\limits_{d=1}^{k-1}f[i][j][d]g[j][i][k-d]\right) \]

注意容斥的时候特判\(i==j\)的情况。
然后\(f\)就是答案数组了。

T3
首先发现设\(f[i]\)为行的1的个数的奇偶性,\(g[i]\)为列的。
那么下一轮有:\(a[i][j]=f[i]\ xor\ g[j]\)
这样我们发现可以交换行列而不改变答案。
那么我们把矩形分成四块,分别统计答案即可。
可以发现每次迭代,四块的变化量是一样大的。
那么我们可以直接模拟这四块,然后用\(map\)判一下当前矩形是否出现过了即可。
至于如何求出初始答案。
直接线段树扫描线即可。

「考试」省选56

标签:暴力   map   1的个数   博弈论   出现   如何   limit   说明   bit   

原文地址:https://www.cnblogs.com/Lrefrain/p/12589517.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!