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

本文共 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

你可能感兴趣的文章
JSON 常用数据转换
查看>>
MongoDB系列一(索引及C#如何操作MongoDB)
查看>>
解决Android SDK下载和更新失败的方法(Win系统) 和离线安装
查看>>
解决eclipse+MAVEN提示One or more constraints have not been satisfied.的问题
查看>>
nginx主配置文件 在那找怎么打开
查看>>
Android:Intent
查看>>
C++标准转换运算符const_cast
查看>>
【Cocos2d-x】Mac 在 Cocos2d-x 3.X 打包Android
查看>>
测试计划与测试方案的区别
查看>>
Hadoop 读取文件API报错
查看>>
JS实现密码加密
查看>>
HTML+CSS-如何定义让两个div横向排列
查看>>
Matlab画柱状和折线对照图
查看>>
javascript时间戳和日期字符串相互转换
查看>>
链接详解--静态库
查看>>
从0开始学java——JUnit4 复习,其实基本思想还是那些,不过采用了新的注释格式的语法...
查看>>
GNU M4 - GNU Project - 免费软件基金会(FSF)
查看>>
jsp中将后台传递过来的json格式的list数据绑定到下拉菜单select
查看>>
Project Euler 85 :Counting rectangles 数长方形
查看>>
MYSQL查询某字段中以逗号分隔的字符串的方法
查看>>