BZOJ 4589 Hard Nim ——FWT
【题目分析】
位运算下的卷积问题。
FWT直接做。
但还是不太民白,发明者要承担泽任的。
【代码】
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i)
#define ll long long
#define maxn 100005
int pr[maxn],ispr[maxn],top,n,m,a[maxn],inv,len;
const int md=1e9+7;
void FWT(int l,int r)
{
if (l==r) return ;
int mid=l+r>>1;
FWT(l,mid); FWT(mid+1,r);
for (int i=l,j=mid+1;i<=mid;++i,++j)
{
int x=(a[i]+a[j])%md;
a[i]=(a[i]-a[j]+md)%md;
a[j]=x;
}
} int pow(int a,int b)
{
int ret=1;
while (b)
{
if (b&1) ret=(ll)ret*a%md;
a=(ll)a*a%md;
b>>=1;
}
return ret;
} void DWT(int l,int r)
{
if (l==r) return;
int mid=l+r>>1;
for (int i=l,j=mid+1;i<=mid;++i,++j)
{
int x=(ll)(a[j]-a[i]+md)*inv%md;
a[i]=(ll)(a[i]+a[j])*inv%md;
a[j]=x;
}
DWT(l,mid); DWT(mid+1,r);
} int main()
{
inv=pow(2,md-2);
for (int i=2;i<maxn;++i)
if (!ispr[i])
{
pr[++top]=i;
for (int j=2;j*i<maxn;++j)
ispr[i*j]=1;
}
while (scanf("%d%d",&n,&m)!=EOF)
{
memset(a,0,sizeof a);
for (int i=1;pr[i]<=m;++i) a[pr[i]]=1;
len=1; while (len<=m) len<<=1; len--;
FWT(0,len);
F(i,0,len) a[i]=pow(a[i],n);
DWT(0,len);
printf("%d\n",a[0]);
}
}
BZOJ 4589 Hard Nim ——FWT的更多相关文章
- 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\)次异或卷积后得到 ...
- 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加速DP)
题目链接 Hard Nim 设$f[i][j]$表示前$i$个数结束后异或和为$j$的方案数 那么$f[i][j] = f[i-1][j$ $\hat{}$ $k]$,满足$k$为不大于$m$的质数 ...
- bzoj 4589: Hard Nim【线性筛+FWT+快速幂】
T了两次之后我突然意识到转成fwt形式之后,直接快速幂每次乘一下最后再逆回来即可,并不需要没此次都正反转化一次-- 就是根据nim的性质,先手必输是所有堆个数异或和为0,也就变成了一个裸的板子 #in ...
- [BZOJ 4589]Hard Nim
Description 题库链接 两人玩 \(nim\) 游戏,\(n\) 堆石子,每堆石子初始数量是不超过 \(m\) 的质数,那么后手必胜的方案有多少种.对 \(10^9+7\) 取模. \(1\ ...
- bzoj 4589 FWT
#include<bits/stdc++.h> #define ll long long using namespace std; ; ; ; ; <<],b[<< ...
随机推荐
- 悦读FM客户端应用源码
<ignore_js_op> <ignore_js_op><ignore_js_op> 正如悦读FM所表达的[当好的文字遇上好的声音],悦读FM提供了一个很好的文章 ...
- 使用python批量建立文件
for i in range(101,110): n = repr(i) + '.txt' file = open('c:\\ip\\' + n, 'w')
- redis分布式共享锁模拟抢单的实现
本篇内容主要讲解的是redis分布式锁,并结合模拟抢单的场景来使用,内容节点如下: jedis的nx生成锁 如何删除锁 模拟抢单动作 1.jedis的nx生成锁 对于分布式锁的生成通常需要注意如下几个 ...
- QSting, QChar, char等的转换
1,QChar 转换char: char QChar::toLatin1();char QChar::toAscii(); 2,Char转QChar: QChar(char ch); 3,QStrin ...
- chrom控制台常用方法
console.assert对输入的表达式进行断言,只有表达式为false时,才输出相应的信息到控制台 . console.count(这个方法非常实用哦)当你想统计代码被执行的次数 console. ...
- java运行环境jdk的安装和环境变量的配置教程
jdk的下载与安装 一.官网下载jdk 1.百度搜索jdk,进入官网,如下图所示: 官网下载jdk图1 2.在官网网站中找到合适的版本下载(以最新版本为例),如下图所示: 官网下载jdk图2 官网下载 ...
- Bootstrap历练实例:按钮组大小
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- ios之UIWebView(2)
UIWebView是iOS sdk中一个最常用的控件.是内置的浏览器控件,我们可以用它来浏览网页.打开文档等等.这篇文章我将使用这个控件,做一个简易的浏览器.如下图: 我们创建一个Window-bas ...
- sessionStorage 的数据会在同一网站的多个标签页之间共享吗?这取决于标签页如何打开
一直以来,我所以为的 sessionStorage 的生命周期是这样的:在 sessionStorage 中存储的数据会在当前浏览器的同一网站的多个标签页中共享,并在此网站的最后一个标签页被关闭后清除 ...
- 51nod 1265 四点共面——计算几何
题目链接:http://www.51nod.com/Challenge/Problem.html#!#problemId=1265 以其中某一点向其它三点连向量,若四点共面,这三个向量定义的平行六面体 ...