博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ4589:Hard Nim——题解
阅读量:5912 次
发布时间:2019-06-19

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

Claris和NanoApe在玩石子游戏,他们有n堆石子,规则如下:
1. Claris和NanoApe两个人轮流拿石子,Claris先拿。
2. 每次只能从一堆中取若干个,可将一堆全取走,但不可不取,拿到最后1颗石子的人获胜。
不同的初始局面,决定了最终的获胜者,有些局面下先拿的Claris会赢,其余的局面Claris会负。
Claris很好奇,如果这n堆石子满足每堆石子的初始数量是不超过m的质数,而且他们都会按照最优策略玩游戏,那么NanoApe能获胜的局面有多少种。
由于答案可能很大,你只需要给出答案对10^9+7取模的值。

天哪这个tinymce可以用latex我才知道……以及我还是想不到dp啊。

用到一个结论:后手获胜条件是每堆石子异或和为0。

设$f[i][j]$为前$i$堆异或和为$j$的方案数,$g[i]$表示$i$是否为质数。

于是$f[i][j]=\sum_{k=0}^mf[i-1][j\oplus k]g[k]$

然后变成卷积就是$f[i][j]=\sum_{a\oplus b=j}f[i-1][a]g[b]$

同样还是把$f[i-1][a]$递归展开发现是卷积套卷积……n次,于是FWT快速幂就好了。

#include#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long ll;const int N=1e5+5;const int p=1e9+7;const int inv=500000004;inline int add(int x,int y){ x+=y;if(x>=p)x-=p;return x;}inline int sub(int x,int y){ x-=y;if(x<0)x+=p;return x;}void FWT(int a[],int n,int on){ for(int i=1;i
<<=1){ for(int j=0;j
<<1)){ for(int k=0;k
>=1; } return res;}int pri[N],g[N],a[N],b[N],tot;void Euler(int n){ g[0]=g[1]=1; for(int i=2;i<=n;i++){ if(!g[i])pri[++tot]=i; for(int j=1;j<=tot;j++){ if(i*pri[j]>n)break; g[i*pri[j]]=1; if(i%pri[j]==0)break; } } for(int i=0;i<=n;i++)g[i]^=1;}int n,m;int main(){ Euler(5e4); while(scanf("%d%d",&n,&m)!=EOF){ int len=1; while(len<=m)len<<=1; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); a[0]=1; for(int i=0;i<=m;i++)b[i]=g[i]; FWT(a,len,1);FWT(b,len,1); for(int i=0;i

+++++++++++++++++++++++++++++++++++++++++++

+本文作者:luyouqi233。               +

+欢迎访问我的博客:+

+++++++++++++++++++++++++++++++++++++++++++

转载于:https://www.cnblogs.com/luyouqi233/p/9190639.html

你可能感兴趣的文章
ubuntu解决vim方向键和退格键失效的方法
查看>>
RDP协议组件X.224在协议流中发现一个错误并且中断了客户端连接
查看>>
【案例】主从替换之后的复制风暴
查看>>
我的友情链接
查看>>
Percona MySQL编译安装到CentOS6.5
查看>>
我的友情链接
查看>>
tar打包
查看>>
Ex2010-05 How offline Address books works in Exchange 2010
查看>>
ioS开发知识(二十八)
查看>>
JAVA企业级应用TOMCAT实战
查看>>
CentOS 目录结构
查看>>
如果一个人
查看>>
码农看天下
查看>>
二.第十一单元 系统恢复
查看>>
如何监控主从故障是否正常?MySQL数据库
查看>>
#13 yum、编译安装与sed命令的使用
查看>>
XSS跨站脚本***问题和原理详解
查看>>
E盘可用空间0字节,要怎样找到文件
查看>>
企业级自动化运维工具应用实战-ansible
查看>>
递归获取二维数组后代、删除后代
查看>>