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

一开始异或和为0的话先手必败。有 n 堆,每堆可以填那些数,求最后异或和为0的方案数,就是一个快速幂的异或FWT。

注意快速幂的过程中对那些数组直接乘就行,不用总是FWT!!!

为什么比Zinn慢了1008ms?

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=5e4+,mod=1e9+;
int n,m,pri[],cnt,len,inv;
int f[N<<],a[N<<],b[N<<];
bool vis[N];
int pw(int x,int k)
{int ret=;while(k){if(k&)ret=(ll)ret*x%mod;x=(ll)x*x%mod;k>>=;}return ret;}
void fwt(int *a,bool fx)
{
for(int R=;R<=len;R<<=)
for(int i=,m=R>>;i<len;i+=R)
for(int j=;j<m;j++)
{
int x=a[i+j]+a[i+m+j],y=a[i+j]+mod-a[i+m+j];
a[i+j]=(ll)x*(fx?inv:)%mod;
a[i+m+j]=(ll)y*(fx?inv:)%mod;
}
}
void init()
{
for(int i=;i<=;i++)
{
if(!vis[i])pri[++cnt]=i;
for(int j=;j<=cnt&&i*pri[j]<=;j++)
{
vis[i*pri[j]]=;
if(i%pri[j]==)break;
}
}
for(int i=;i<=cnt;i++)f[pri[i]]=;
inv=pw(,mod-);
}
int main()
{
init();
while(scanf("%d%d",&n,&m)==)
{
for(len=;len<=m;len<<=);
a[]=;for(int i=;i<len;i++)a[i]=;
for(int i=;i<=m;i++)b[i]=f[i];
for(int i=m+;i<len;i++)b[i]=;
fwt(a,); fwt(b,);
while(n)
{
if(n&)
for(int i=;i<len;i++)a[i]=(ll)a[i]*b[i]%mod;
for(int i=;i<len;i++)b[i]=(ll)b[i]*b[i]%mod;
n>>=;
}
fwt(a,);
printf("%d\n",a[]);
}
return ;
}

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

  1. bzoj 4589 Hard Nim —— FWT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4589 先手必败,是一开始所有石子的异或和为0: 生成函数 (xpri[1] + xpri[2 ...

  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. 20145231第二周Java学习笔记

    20145231 <Java程序设计>第2周学习总结 教材学习内容总结 本周的学习采用的依然是先看课本,再看视频,然后实践敲代码,最后根据学习笔记总结完成博客. 第三章:基础语法 知识点比 ...

  2. 为多个文件夹下的C源代码编写Makefile文件

    上一篇文章写了如何为在同一个文件夹下的C源代码,本篇文章为多个文件夹下的C源代码编写Makefile文件. 建立两个文件夹,分别为abs与src.其最终目录结构如下: 1 $ ls * 2 jun.c ...

  3. 使用shell统计字符串出现的次数,并从大到小进行排序显示

  4. iBatis的Settings节点参数详解[转]

    (1) cacheModelsEnabled: 是否启用SqlMapClient上的缓存机制.建议设为"true".默认值为“true”. (2) enhancementEnabl ...

  5. SpringCloud Bus消息总线

    在微服务架构中,通常会使用轻量级的消息代理来构建一个共用的消息主题来连接各个微服务实例,它广播的消息会被所有在注册中心的微服务实例监听和消费,也称消息总线. SpringCloud中也有对应的解决方案 ...

  6. Spring Boot2.0之 整合XXL-Job

    参考git上面的 springboot demo 创建maven工程: pom: <project xmlns="http://maven.apache.org/POM/4.0.0&q ...

  7. mysql删除重复记录

    Solution 1: Add Unique Index on your table: ALTER IGNORE TABLE `TableA` ADD UNIQUE INDEX (`member_id ...

  8. php二维数组自定义排序

    $arr = array( '0' => array('id' =>1,'price'=>200), '1' => array('id' =>2,'price'=> ...

  9. JavaScript 全部介绍

     1.new 表达式  new之后写函数名的话,就会把该函数作为构造函数来进行调用.   2.字符串型的运算  由于JavaScript的字符串型是不可变类型,所以字符串值本质上是不能改变的.这个答案 ...

  10. localstorage存储对象

    之前在客户端存储数据一直用的是cookie,由于有大小等限制,随着html5时代的到来,现在大多数用的是localstorage存储数据: 例如: localStorage.setItem(" ...