BZOJ 4589 Hard Nim(FWT加速DP)
题目链接 Hard Nim
设$f[i][j]$表示前$i$个数结束后异或和为$j$的方案数
那么$f[i][j] = f[i-1][j$ $\hat{}$ $k]$,满足$k$为不大于$m$的质数。
这个$DP$太暴力了。让我们冷静分析。
设不大于m的质数从小到大分别为$c_{1}$, $c_{2}$, ..., $c_{k}$
$f[i][j] = ∑f[i-1][j$ $\hat{}$ $c[k]]$, 我们令$g[c[i]]$为$1$,其余为$0$。
$f[i][j] = ∑f[i-1][j$ $\hat{}$ $k] * g[k]$
我们发现后边其实就是一个异或卷积的形式。
于是就可以$FWT$了。
但是左边那一维还是巨大……
我们可以发现这个多项式乘法是满足结合律的
于是在做逆变换之前的那个乘法的时候直接快速幂即可。
#include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i)
#define MP make_pair
#define fi first
#define se second typedef long long LL; const LL mod = 1e9 + 7;
const LL rev = (mod + 1) >> 1; int n, m;
int l;
int tot = 0;
int p[1 << 20];
LL a[1 << 20], b[1 << 20], g[1 << 20]; void pre(){
rep(i, 2, 5e4){
if (!g[i]) p[++tot] = i;
for (int j = 1; j <= tot && i * p[j] <= 5e4; ++j){
g[i * p[j]] = 1;
if (i % p[j] == 0) break;
}
}
} void FWT(LL *a, int n){
for (int d = 1; d < n; d <<= 1)
for (int m = d << 1, i = 0; i < n; i += m)
for (int j = 0; j < d; j++){
LL x = a[i + j], y = a[i + j + d];
a[i + j] = (x + y) % mod, a[i + j + d] = (x - y + mod) % mod; }
} void UFWT(LL *a, int n){
for (int d = 1; d < n; d <<= 1)
for (int m = d << 1, i = 0; i < n; i += m)
for (int j = 0; j < d; j++){
LL x = a[i + j], y = a[i + j + d];
a[i + j] = 1LL * (x + y) * rev % mod, a[i + j + d] = (1LL * (x - y) * rev % mod + mod) % mod;
}
} void solve(LL *a, LL *b, int n, int p){
a[0] = 1;
FWT(a, n);
FWT(b, n);
while (p){
if (p & 1){
rep(i, 0, n - 1) (a[i] *= b[i]) %= mod;
} rep(i, 0, n - 1) (b[i] *= b[i]) %= mod;
p >>= 1;
} UFWT(a, n);
} int main(){ pre(); while (~scanf("%d%d", &n, &m)){
for (l = 1; l <= m; l <<= 1){;} memset(a, 0, sizeof a);
memset(b, 0, sizeof b); for (int i = 1; i <= tot && p[i] <= m; ++i){
b[p[i]] = 1;
} solve(a, b, l, n);
printf("%lld\n", a[0]);
} return 0;
}
BZOJ 4589 Hard Nim(FWT加速DP)的更多相关文章
- bzoj 4589 Hard Nim——FWT
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4589 一开始异或和为0的话先手必败.有 n 堆,每堆可以填那些数,求最后异或和为0的方案数, ...
- bzoj 4589 Hard Nim —— FWT
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4589 先手必败,是一开始所有石子的异或和为0: 生成函数 (xpri[1] + xpri[2 ...
- BZOJ.4589.Hard Nim(FWT)
题目链接 FWT 题意即,从所有小于\(m\)的质数中,选出\(n\)个数,使它们异或和为\(0\)的方案数. 令\(G(x)=[x是质数]\),其实就是对\(G(x)\)做\(n\)次异或卷积后得到 ...
- BZOJ 4589 Hard Nim ——FWT
[题目分析] 位运算下的卷积问题. FWT直接做. 但还是不太民白,发明者要承担泽任的. [代码] #include <cstdio> #include <cstring> # ...
- FWT [BZOJ 4589:Hard Nim]
4589: Hard Nim Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 275 Solved: 152[Submit][Status][Disc ...
- BZOJ 4589 Hard Nim(FWT+博弈论+快速幂)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4589 [题目大意] 有n堆石子,每堆都是m以内的质数,请问后手必胜的局面有几种 [题解 ...
- bzoj 4589: Hard Nim【线性筛+FWT+快速幂】
T了两次之后我突然意识到转成fwt形式之后,直接快速幂每次乘一下最后再逆回来即可,并不需要没此次都正反转化一次-- 就是根据nim的性质,先手必输是所有堆个数异或和为0,也就变成了一个裸的板子 #in ...
- [BZOJ 4589]Hard Nim
Description 题库链接 两人玩 \(nim\) 游戏,\(n\) 堆石子,每堆石子初始数量是不超过 \(m\) 的质数,那么后手必胜的方案有多少种.对 \(10^9+7\) 取模. \(1\ ...
- bzoj 4347 [POI2016]Nim z utrudnieniem DP
4347: [POI2016]Nim z utrudnieniem Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 733 Solved: 281[Su ...
随机推荐
- 《Cracking the Coding Interview》——第1章:数组和字符串——题目5
2014-03-18 01:40 题目:对字符串进行类似游程编码的压缩,如果压缩完了长度更长,则返回不压缩的结果.比如:aabcccccaaa->a2b1c5a3,abc->abc. 解法 ...
- 超链接标签的CSS伪类link,visited,hover,active
CSS伪类,是一种特殊的类,它针对到CSS选择器起作用,使选中的标签或元素产生特定的效果. CSS伪类的语法就是: 选择器 : 伪类名 { 属性 : 属性值 } 用的最多的伪类就是超链接a的伪类,有: ...
- loadrunner 欺骗ip设置
工具准备:loadrunner12,windows 10 ip欺骗=ip wizard 前提条件:本机IP地址为固定地址,不是自动获取的地址 方法: 1.管理员身份打开cmd 2.输入命令:confi ...
- react生命周期方法
Mounting阶段,当一个组件的实例被创建并插入到DOM中时,下面这些函数会被调用: constructor() componentWillMount:组件即将被渲染到页面上,render之前最后一 ...
- Android社会化分享功能的实现步骤
众所周知,互联网是一个资源共享的地方,在网络上,我们可以分享我们所有认为好的资源.而随着互联网信息爆发式的增长,我们习惯了一键分享功能,比如:微博分享.微信分享.QQ空间分享.人人网分享等等.由此可见 ...
- 《R语言实战》读书笔记--第二章 创建数据集
2.1数据集的概念 变量的类型是不同的,比如标示符.日期变量.连续变量.名义变量.有序型变量等,记得数据挖掘导论中有专门的描述. R可以处理的数据类型包括了数值型.字符型.逻辑型.复数型(虚数).原生 ...
- 怎么用dos命令进入指定的文件夹
在正常开发中经常需要我们进入指定的文件夹下面的例子演示了进入这个文件夹D:\portal\liferay-portal-tomcat-5.5-4.4.0的dos命令 win+R---->输入cm ...
- Installing patches on an ESXi 5.x by the command
Purpose This article outlines the procedure for installing patches on an ESXi 5.x host from the comm ...
- .ini配置CAN信息
#include <iostream> #include <windows.h>//这个头文件一定要添加,否则GetPrivateProfileString(...)函数无法使 ...
- POJ1163 The Triangle
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 44997 Accepted: 27174 Description 73 ...