题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4589

先手必败,是一开始所有石子的异或和为0;

生成函数 (xpri[1] + xpri[2] + ... + xpri[k])n,pri[k] <= m

FWT求解即可;

而且不要快速幂里面每次变换来变换去的,只有快速幂前后需要变换。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
int const xn=(<<),mod=1e9+;
int n,m,a[xn],b[xn],lim,inv,cnt,pri[xn];
bool vis[xn];
void init()
{
int mx=xn-;
for(int i=;i<=mx;i++)
{
if(!vis[i])pri[++cnt]=i;
for(int j=;j<=cnt&&(ll)i*pri[j]<=mx;j++)
{
vis[i*pri[j]]=;
if(i%pri[j]==)break;
}
}
}
int upt(int x){while(x>=mod)x-=mod; while(x<)x+=mod; return x;}
ll pw(ll a,int b)
{
ll ret=;
for(;b;b>>=,a=(a*a)%mod)if(b&)ret=(ret*a)%mod;
return ret;
}
void fwt(int *a,int tp)
{
for(int mid=;mid<lim;mid<<=)
for(int j=,len=(mid<<);j<lim;j+=len)
for(int k=;k<mid;k++)
{
int x=a[j+k],y=a[j+mid+k];
a[j+k]=upt(x+y); a[j+mid+k]=upt(x-y);
if(tp==-)a[j+k]=(ll)a[j+k]*inv%mod,a[j+mid+k]=(ll)a[j+mid+k]*inv%mod;
}
}
int main()
{
inv=pw(,mod-); init();
while(scanf("%d%d",&n,&m)==)
{
memset(a,,sizeof a);
for(int i=;i<=m;i++)if(!vis[i])a[i]=;
memset(b,,sizeof b); b[]=;
lim=; while(lim<=m)lim<<=;
fwt(a,); fwt(b,);
for(;n;n>>=)
{
if(n&)for(int i=;i<lim;i++)b[i]=(ll)a[i]*b[i]%mod;
for(int i=;i<lim;i++)a[i]=(ll)a[i]*a[i]%mod;
}
fwt(b,-);
printf("%d\n",b[]);
}
return ;
}

bzoj 4589 Hard Nim —— FWT的更多相关文章

  1. bzoj 4589 Hard Nim——FWT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4589 一开始异或和为0的话先手必败.有 n 堆,每堆可以填那些数,求最后异或和为0的方案数, ...

  2. BZOJ.4589.Hard Nim(FWT)

    题目链接 FWT 题意即,从所有小于\(m\)的质数中,选出\(n\)个数,使它们异或和为\(0\)的方案数. 令\(G(x)=[x是质数]\),其实就是对\(G(x)\)做\(n\)次异或卷积后得到 ...

  3. BZOJ 4589 Hard Nim ——FWT

    [题目分析] 位运算下的卷积问题. FWT直接做. 但还是不太民白,发明者要承担泽任的. [代码] #include <cstdio> #include <cstring> # ...

  4. FWT [BZOJ 4589:Hard Nim]

    4589: Hard Nim Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 275  Solved: 152[Submit][Status][Disc ...

  5. BZOJ 4589 Hard Nim(FWT+博弈论+快速幂)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4589 [题目大意] 有n堆石子,每堆都是m以内的质数,请问后手必胜的局面有几种 [题解 ...

  6. BZOJ 4589 Hard Nim(FWT加速DP)

    题目链接  Hard Nim 设$f[i][j]$表示前$i$个数结束后异或和为$j$的方案数 那么$f[i][j] = f[i-1][j$ $\hat{}$ $k]$,满足$k$为不大于$m$的质数 ...

  7. bzoj 4589: Hard Nim【线性筛+FWT+快速幂】

    T了两次之后我突然意识到转成fwt形式之后,直接快速幂每次乘一下最后再逆回来即可,并不需要没此次都正反转化一次-- 就是根据nim的性质,先手必输是所有堆个数异或和为0,也就变成了一个裸的板子 #in ...

  8. [BZOJ 4589]Hard Nim

    Description 题库链接 两人玩 \(nim\) 游戏,\(n\) 堆石子,每堆石子初始数量是不超过 \(m\) 的质数,那么后手必胜的方案有多少种.对 \(10^9+7\) 取模. \(1\ ...

  9. bzoj 4589 FWT

    #include<bits/stdc++.h> #define ll long long using namespace std; ; ; ; ; <<],b[<< ...

随机推荐

  1. Majority Number

    题目描写叙述 链接地址 解法 算法解释 题目描写叙述 Given an array of integers, the majority number is the number that occurs ...

  2. openssl之BIO系列之12---文件描写叙述符(fd)类型BIO

    文件描写叙述符(fd)类型BIO ---依据openssl doc\crypto\bio_s_fd.pod翻译和自己的理解写成 (作者:DragonKing Mailwzhah@263.net 公布于 ...

  3. 苦逼IT才能看懂的笑话

    这是苦逼IT才能看懂的笑话1.栈和队列的区别是啥? 吃多了拉就是队列:吃多了吐就是栈 2.世界上最遥远的距离不是生与死,而是你亲手制造的BUG就在你眼前,你却怎么都找不到她... 3.<c++程 ...

  4. POJ 1141 Brackets Sequence (区间DP)

    Description Let us define a regular brackets sequence in the following way: 1. Empty sequence is a r ...

  5. bluedroid源代码分析之ACL包发送和接收(一)

    很多其它内容请參照我的个人网站: http://stackvoid.com/ ACL 链路在 Bluetooth 中很重要,一些重要的应用如 A2DP, 基于 RFCOMM 的应用,BNEP等都要建立 ...

  6. hdu4455 dp

    pid=4455">http://acm.hdu.edu.cn/showproblem.php?pid=4455 Substrings Time Limit: 10000/5000 M ...

  7. Deployment相对ReplicaSet优势

    系列目录 RS与Deployment主要用于替代RC.RS的全称为Replica Set.相对于RC,RS与Deployment的优势如下: RC只支持基于等式的selector,如env=dev或者 ...

  8. java: private, protected, public

    这三个 「可访问修饰符」,是一个老生常谈的话题了.在 C++ 中也有类似的概念. 按其修饰对象的不同,分为几种用法小记一下: 用于类 只有 public 可以修饰类:private 和 protect ...

  9. 五、Web框架基础(2)

    Tornado 异步协程编程.(其实是异步IO而非真正的异步,从内核拷贝到用户空间的过程还是同步的) 适合用户量大.高并发,如抢票.网页游戏.在线聊天等场景:或大量HTTP持久连接,通过单TCP持久连 ...

  10. 代写GIS系统

    代写GIS系统,熟悉arcgis,leaflet ,百度地图等api.可以提供系统代写,技术咨询等