首页 > 其他 > 详细

模拟测试20191025

时间:2019-10-25 10:53:15      阅读:101      评论:0      收藏:0      [点我收藏+]

$T1:异或$

一看位运算,直接拆二进制分开考虑

设$a_{i}$表示$[L,R]$中第$i$位$1$的总个数

简单写柿子可以发现每一位的贡献为$2\times a_{i}\times (R-L+1)-2\times a_{i}^{2}$

求$a_{i}$可以数位$dp$一下

 

$T2:取石子$

打表发现先手必败只有$10000+$种状态

然而直接打表交不上去(%%%$skyh$用$301$进制打表太巨啦

我们又发现用先手必败刷表刷不到的都是先手必拜

那我们抛弃之前填表的方法,改成刷表就好了,只用先手必败转移就好了

 

$T3:优化$

我们发现第$1$,$k$段的贡献系数为$\pm 1$

中间的系数一定为$\pm 2或0$

且一定有如下形式$......2,0,0,-2,0,2,0......$

即去掉$0$后两个$+$和两个$-$不能相连

那我们设$dp_{i,j,k}$表示到位置$i$,有了$j$个块,目前状态为$k$的最大值

$k=\left\{\begin{matrix}
0 &-1/-2 \\
1 &+1/+2 \\
2 &(-2/-1)+0 \\
3 &(+2/+1) +0
\end{matrix}\right.$

最后转移再加一维,表示当前在段中还是段外就好了

模拟测试20191025

原文:https://www.cnblogs.com/mikufun-hzoi-cpp/p/11736381.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!