博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj千题计划308:bzoj4589: Hard Nim(倍增FWT+生成函数)
阅读量:5221 次
发布时间:2019-06-14

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

 

n*m*m 做法

dp[i][j] 前i堆石子,异或和为j的方案数

 

 第一重循环可以矩阵快速幂优化

后面求出序列的生成函数可以FWT优化

 

做log次FWT也很慢(logn*m*logm)

两个合并就是倍增FWT,即先对生成函数的序列做一次正变换,对正变换得到的每个结果快速幂,最后逆变换回去

时间复杂度O(logn*m+m*logm)

 

生成函数:是质数则系数为1,否则为0

 

#include
#include
using namespace std;#define N 50001const int mod=1e9+7;const int M=1<<16;int inv;int a[N];int b[M+1];void FWT(int *a,int n){ int x,y; for(int d=1;d
<<=1) for(int m=d<<1,i=0;i
=mod ? mod : 0; a[i+j+d]+=a[i+j+d]<0 ? mod : 0; }}void IFWT(int *a,int n){ int x,y; for(int d=1;d
<<=1) for(int m=d<<1,i=0;i
>=1) if(b&1) res=1LL*res*a%mod; return res;}int main(){ for(int i=2;i

 

转载于:https://www.cnblogs.com/TheRoadToTheGold/p/8953849.html

你可能感兴趣的文章
对称加密和非对称加密
查看>>
数据库锁机制及乐观锁,悲观锁的并发控制
查看>>
图像处理中双线性插值
查看>>
RobHess的SIFT代码解析之RANSAC
查看>>
03 线程池
查看>>
201771010125王瑜《面向对象程序设计(Java)》第十三周学习总结
查看>>
手机验证码执行流程
查看>>
python 基础 ----- 变量
查看>>
设计模式课程 设计模式精讲 2-2 UML类图讲解
查看>>
Silverlight 的菜单控件。(不是 Toolkit的)
查看>>
:hover 鼠标同时触发两个元素变化
查看>>
go语言学习十三 - 相等性
查看>>
Idea 提交代码到码云(提交到github也大同小异)
查看>>
c#连接excel2007未安装ISAM解决
查看>>
Mono 异步加载数据更新主线程
查看>>
初识lua
查看>>
我是插件狂人,jDuang,jValidator,jModal,jGallery
查看>>
张季跃 201771010139《面向对象程序设计(java)》第四周学习总结
查看>>
如何解除循环引用
查看>>
android中fragment的使用及与activity之间的通信
查看>>