BZOJ3492: PA2012 Binary Dodgeball
发布日期:2021-05-06 03:50:34 浏览次数:27 分类:技术文章

本文共 1425 字,大约阅读时间需要 4 分钟。

感谢YJQ和visitWorld两位打野..

画个图发现是个Nim游戏

然后发现是个数位DP..

#include
#include
#include
using namespace std;#define ll long longll DP[51][4][81][2];ll check(ll max){ ll base=1ll<<49; memset(DP,0,sizeof(DP)); DP[0][0][0][1]=1; for(int i=1;i<=50;i++,base>>=1) for(int k=0;k<=63;k++) { if(i==48&&k==2) i++,i--; if(base&max)DP[i][3][k][1]=DP[i-1][3][k][1]+DP[i-1][1][k][1]; else DP[i][2][k][1]=DP[i-1][3][k^(50-i)][1]+DP[i-1][1][k^(50-i)][1]; if(base&max) DP[i][1][k][1]=DP[i-1][0][k^(50-i)][1]+DP[i-1][2][k^(50-i)][1]; else DP[i][0][k][1]=DP[i-1][0][k][1]+DP[i-1][2][k][1]; DP[i][3][k][0]=DP[i-1][3][k][0]+DP[i-1][1][k][0]; DP[i][1][k][0]=DP[i-1][2][k^(50-i)][0]+DP[i-1][0][k^(50-i)][0]; DP[i][2][k][0]=DP[i-1][1][k^(50-i)][0]+DP[i-1][3][k^(50-i)][0]+ ((base&max)?DP[i-1][1][k^(50-i)][1]+DP[i-1][3][k^(50-i)][1]:0); DP[i][0][k][0]=DP[i-1][2][k][0]+DP[i-1][0][k][0]+ ((base&max)?DP[i-1][2][k][1]+DP[i-1][0][k][1]:0); } int i=50; return DP[i][0][0][0]+DP[i][1][0][0]+DP[i][3][0][0]+DP[i][2][0][0]+ DP[i][0][0][1]+DP[i][1][0][1]+DP[i][3][0][1]+DP[i][2][0][1]-1;}int main(){ ll k; scanf("%lld",&k); ll R=1ll<<48,T,Mid,L=1; ll Ta=check(10); while(L
>1; if((T=check(Mid))
上一篇:BZOJ1187: [HNOI2007]神奇游乐园
下一篇:Nim

发表评论

最新留言

很好
[***.229.124.182]2025年04月17日 05时09分52秒