bzoj4589
fwt
原理并不知道
nim游戏石子异或和=0后手赢
那么也就是求a[1]^a[2]^...^a[n]=0的方案数
这个和bzoj3992一样可以dp
dp[i][j]表示前i个数异或和为j的方案数 dp[0][0] = 1
dp[i][j] = dp[i - 1][k] * a[p] p ^ k = j a[p] = 0 / 1 表示有没有p这个数
这个东西也不能矩阵快速幂
但是我们有一个叫fwt的东西
能够求c = a @ b @是一种运算 -----> c[i] = a[j] * b[k] i = j ^ k
那么每次转移就是fwt了
由于转移的形式一样 那么就可以快速幂 并且由于fwt运算并不会向fft那样下标多出来一些东西 也就不用算循环卷积
直接fwt后每个数pow一下 再ifwt就行了
复杂度O(n log n + n log m)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = ;
const ll P = ;
int n, m, len;
ll inv;
ll a[N];
int p[N], mark[N];
ll power(ll x, ll t)
{
ll ret = ;
for(; t; t >>= , x = x * x % P) if(t & ) ret = ret * x % P;
return ret;
}
void fwt(ll *a, int n)
{
for(int l = ; l <= n; l <<= )
{
int m = l >> ;
for(int i = ; i < n; i += l)
for(int k = ; k < (l >> ); ++k)
{
ll x = a[i + k], y = a[i + k + m];
a[i + k] = (x + y) % P;
a[i + k + m] = ((x - y) % P + P) % P;
}
}
}
void ifwt(ll *a, int n)
{
for(int l = n; l >= ; l >>= )
{
int m = l >> ;
for(int i = ; i < n; i += l)
for(int k = ; k < m; ++k)
{
ll x = a[i + k], y = a[i + m + k];
a[i + k] = (x + y) % P * inv % P;
a[i + m + k] = ((x - y) % P + P) % P * inv % P;
}
}
}
int main()
{
inv = power(, P - );
for(int i = ; i <= ; ++i)
{
if(!mark[i]) p[++p[]] = i;
for(int j = ; j <= p[] && i * p[j] <= ; ++j)
{
mark[i * p[j]] = ;
if(i % p[j] == ) break;
}
}
while(scanf("%d%d", &n, &m) != EOF)
{
memset(a, , sizeof(a));
for(int i = ; i <= p[] && p[i] <= m; ++i) a[p[i]] = ;
for(len = ; len <= m; len <<= );
fwt(a, len);
for(int i = ; i < len; ++i) a[i] = power(a[i], n);
ifwt(a, len);
printf("%lld\n", a[]);
}
return ;
}
bzoj4589的更多相关文章
- BZOJ4589 Hard Nim FWT 快速幂 博弈
原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ4589.html 题目传送门 - BZOJ4589 题意 有 $n$ 堆石子,每一堆石子的取值为 $2$ ...
- BZOJ4589 Hard Nim(博弈+FWT)
即使n个数的异或为0.如果只有两堆,将质数筛出来设为1,做一个异或卷积即可.显然这个东西满足结合律,多堆时直接快速幂.可以在点值表示下进行. #include<iostream> #inc ...
- BZOJ4589 Hard Nim 【FWT】
题目链接 BZOJ4589 题解 FWT 模板题 #include<algorithm> #include<iostream> #include<cstdlib> ...
- BZOJ4589 Hard Nim(快速沃尔什变换模板)
终于抽出时间来学了学,比FFT不知道好写到哪里去. #include <cstdio> typedef long long ll; ,p=1e9+; int k,m,n,a[N],pi[N ...
- 【BZOJ4589】Hard Nim(FWT)
题解: 由博弈论可以知道题目等价于求这$n$个数$\^$为0 快速幂$+fwt$ 这样是$nlog^2$的 并不能过 而且得注意$m$的数组$\^$一下会生成$2m$ #include <bit ...
- bzoj千题计划308:bzoj4589: Hard Nim(倍增FWT+生成函数)
https://www.lydsy.com/JudgeOnline/problem.php?id=4589 n*m*m 做法 dp[i][j] 前i堆石子,异或和为j的方案数 第一重循环可以矩阵快速幂 ...
- BZOJ4589 Hard Nim(快速沃尔什变换FWT)
这是我第一道独立做出来的FWT的题目,所以写篇随笔纪念一下. (这还要纪念,我太弱了) 题目链接: BZOJ 题目大意:两人玩nim游戏(多堆石子,每次可以从其中一堆取任意多个,不能操作就输).$T$ ...
- bzoj4589: Hard Nim fwt
题意:求n个m以内的素数亦或起来为0的方案数 题解:fwt板子题,先预处理素数,把m以内素数加一遍(下标),然后fwt之后快速幂即可,在ifwt之后a[0]就是答案了 /*************** ...
- 【bzoj4589】Hard Nim FWT+快速幂
题目大意:给你$n$个不大于$m$的质数,求有多少种方案,使得这$n$个数的异或和为$0$.其中,$n≤10^9,m≤10^5$. 考虑正常地dp,我们用$f[i][j]$表示前$i$个数的异或和为$ ...
- BZOJ4589: Hard Nim(FWT 快速幂)
题意 题目链接 Sol 神仙题Orzzzz 题目可以转化为从\(\leqslant M\)的质数中选出\(N\)个\(xor\)和为\(0\)的方案数 这样就好做多了 设\(f(x) = [x \te ...
随机推荐
- windows xp下mysql5.0安装
安装注意要点: 1.不要安装在带有中文的安装路径 2.之前若有安装过mysql,请一定要卸载干净 MySQL安装的图解5.0.28 - CSDN
- mysql存储过程之循环
链接: http://www.blogjava.net/rain1102/archive/2011/05/16/350301.html
- windows ffmpeg 推送摄像头数据到rtmp服务
文本主要讲述windows系统下如何利用ffmpeg获取摄像机流并推送到rtmp服务,命令的用法前文 中有讲到过,这次是通过代码来实现.实现该项功能的基本流程如下: 图1 ffmpeg推流流程图 较前 ...
- 摘自《Linux与unix shell编程指南》
shift运行后,$#随之减少:如果需要知道命令行中输入的最后一个参数(通常是一个文件名),可以有两种选择:使用命令 eval echo \$$#;使用shift命令:shift 'expr $# - ...
- VM不能ping通www.baidu.com的问题【NAT】 更新了【桥接模式】
NAT模式 1.为NAT设置子网及掩码等信息 点击VMWare菜单栏“编辑” —> 虚拟网络编辑器 [下图第一张图]—> 选中VMnet8(当然这个看自己的设备后缀是多少了,只要外部连接方 ...
- 03 svn 权限与用户管理
一:权限管理 (1)svn仓库各个作用 svnserve.conf [svn仓库的配置文件] password [svn仓库账号和密码配置文件] authz [svn仓库的访问权限] (2)访问权限 ...
- Java ClassLoader详解(转载)
Java ClassLoader详解 类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一.它使得 Java 类可以被动态加载到 Java 虚拟机中并执行.类加载器从 JDK ...
- ZeroClipboard—ZeroClipboard的使用
1.ZeroClipboard的作用: 借助Zero Clipboard能够简单高速地将内容拷贝到剪贴板,相似点击某些网页中"复制"按钮后复制对应区域的内容. 2.ZeroClip ...
- Bubble Cup X - Finals [Online Mirror] B. Neural Network country 矩阵快速幂加速转移
B. Neural Network country time limit per test 2 seconds memory limit per test 256 megabytes Due to t ...
- 1069: [SCOI2007]最大土地面积
1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 2961 Solved: 1162[Submit][Sta ...