bzoj 4589: Hard Nim【线性筛+FWT+快速幂】
T了两次之后我突然意识到转成fwt形式之后,直接快速幂每次乘一下最后再逆回来即可,并不需要没此次都正反转化一次……
就是根据nim的性质,先手必输是所有堆个数异或和为0,也就变成了一个裸的板子
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=500005,mod=1e9+7,inv2=500000004;
int n,m,q[N],tot,bt,lm;
long long a[N],c[N],r[N];
bool v[N];
void dft(long long a[],int f)
{
for(int i=1;i<lm;i<<=1)
for(int j=0;j<lm;j+=(i<<1))
for(int k=0;k<i;k++)
{
long long x=a[j+k],y=a[i+j+k];
a[j+k]=(x+y)%mod,a[i+j+k]=(x-y+mod)%mod;
if(f==-1)
a[i+j+k]=a[i+j+k]*inv2%mod,a[j+k]=a[j+k]*inv2%mod;
}
}
int main()
{
v[1]=1;
for(int i=2;i<=50000;i++)
{
if(!v[i])
q[++tot]=i;
for(int j=1;j<=tot&&i*q[j]<=50000;j++)
{
v[i*q[j]]=1;
if(i%q[j]==0)
break;
}
}
while(~scanf("%d%d",&n,&m))
{
memset(a,0,sizeof(a));
memset(r,0,sizeof(r));
bt=0,lm=0;
for(int i=1;i<=tot&&q[i]<=m;i++)
a[q[i]]=1;
for(;(1<<bt)<=m;bt++);
lm=(1<<bt);
n--;
dft(a,1);
for(int i=0;i<lm;i++)
r[i]=a[i];
while(n)
{
if(n&1)
{
for(int i=0;i<lm;i++)
r[i]=r[i]*a[i]%mod;
}
for(int i=0;i<lm;i++)
a[i]=a[i]*a[i]%mod;
n>>=1;
}
dft(r,-1);
printf("%lld\n",r[0]);
}
return 0;
}
bzoj 4589: Hard Nim【线性筛+FWT+快速幂】的更多相关文章
- 【51Nod1773】A国的贸易 FWT+快速幂
题目描述 给出一个长度为 $2^n$ 的序列,编号从0开始.每次操作后,如果 $i$ 与 $j$ 的二进制表示只差一位则第 $i$ 个数会加上操作前的第 $j$ 个数.求 $t$ 次操作后序列中的每个 ...
- BZOJ 4589 Hard Nim(FWT+博弈论+快速幂)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4589 [题目大意] 有n堆石子,每堆都是m以内的质数,请问后手必胜的局面有几种 [题解 ...
- 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
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4589 一开始异或和为0的话先手必败.有 n 堆,每堆可以填那些数,求最后异或和为0的方案数, ...
- 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
题目: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\)次异或卷积后得到 ...
- 【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 ...
随机推荐
- 【基础练习】【线性DP】codevs3027 线段覆盖2题解
文章被盗还是非常严重,加版权信息 转载请注明出处 [ametake版权全部]http://blog.csdn.net/ametake欢迎来看看 这道题目是线性动归 可是思想和背包有些类似 事实上线性动 ...
- WheelView实现省市区三级联动(数据库实现版本号附带完整SQL及数据)
近期在实现收货地址功能,用到了省市区三级联动效果,网上找到一般都是xml或json.数据源陈旧改动麻烦.改动了一下使用数据库方式实现了一下 数据源解决.因为数据量比較大通过初始化批量运行SQL的方式不 ...
- Dos 改动IP 地址
1.改动 ip地址 子网掩码 默认网关 netsh interface ip set address "本地连接" static 192.168.1.23 255.255.255. ...
- GY的实验室 - Phalcon+Nginx+PHP-FPM环境搭建(转)
Phalcon简介 由于半路出家的缘故,没用过几个PHP框架,第一个了解的框架是公司自己的,然后又试着用了Yii,CI.在读了CSDN在某度的高排名翻译文章(PHP开发框架流行度排名:Laravel居 ...
- php 封装memcache类
<?php /* * memcache类 */ class Memcacheds{ //声明静态成员变量 private static $m = null; pri ...
- IBM中国研究院、SAP、网易游戏、IBM2015应届生招聘笔试面试问题分享
IBM中国研究院实习生 早在今年4月份.我面试的是IBM中国研究院的实习生岗位.主要是自然语言处理和语义网方向.那时我还在香港上学,两个考官对我进行的是电话面试,大概持续半个多小时,首先是我的自我介绍 ...
- Zip加密解密
Zip加密解密方法: 1.winzipaes http://blog.csdn.net/zhyh1986/article/details/7724229 2.zip4j http://blog.csd ...
- 2016/06/02 网摘记录 svn 服务器端 客户端 安装使用
http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2408089.html http://www.cnblogs.com/xiaobaihom ...
- Latex 5: LaTeX资料下载
转: LaTeX资料下载 最全latex资料下载 LaTeX命令速查手册1
- python 1: 解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题
问题: 我在ubuntu14.04下用python中的matplotlib模块内的pyplot输出图片不能显示中文,怎么解决呢? 解决: 1.指定默认编码为UTF-8: 在python代码开头加入如下 ...