[bzoj4589]Hard Nim(FWT快速沃尔什变化+快速幂)
题面:https://www.lydsy.com/JudgeOnline/problem.php?id=4589
题意
求选恰好n个数,满足每个数都是不大于m的质数,且它们的异或和为0的方案数。
解法
设f(i,j)为选了i个数,异或和为j的方案数,转移如下:
\]
我们发现这是一个异或卷积的形式,状态向量一开始只有0的地方是1,它与一个只有质数下标处值为1的向量卷积n次,然后下标为0处的值就是答案。
但我们又发现n是1e9级别的,所以考虑用快速幂求出质数向量自卷n次的结果,最后再卷上状态向量就行。
总时间复杂度O(mlog2(n)log2(m)).
#include<bits/stdc++.h>
using namespace std;
#define re register
#define il inline
#define rep(i,a,b) for(re int i=(a);i<=(b);++i)
const int N =105005;
int p[N],cnt,n,m;
bool vis[N];
il int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch<='9'&&ch>='0')x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
return x*f;
}
const int mod =1e9+7;
typedef long long ll;
const ll inv =500000004;
int g[N],f[N];
ll ksm1(ll x,ll y){
ll aa=1ll;
for(;y;y>>=1,x=(x*x)%mod)if(y&1)aa=(aa*x)%mod;
return aa;
}
void fwt(int *a,int l,int f){
re int i,j,k,x,y;
for(j=1;j<l;j<<=1){
for(i=0;i<l;i+=(j<<1)){
for(k=i;k<i+j;++k){
x=a[k],y=a[k+j];
a[k]=(x+y)%mod,a[k+j]=(x-y+mod)%mod;
if(f==-1)a[k]=1ll*a[k]*inv%mod,a[k+j]=1ll*a[k+j]*inv%mod;
}
}
}
}
void ksm(int l,int y){
fwt(g,l,1),fwt(f,l,1);
for(;y;y>>=1){
if(y&1){
rep(i,0,l-1)f[i]=1ll*f[i]*g[i]%mod;
}
rep(i,0,l-1)g[i]=1ll*g[i]*g[i]%mod;
}
}
int main(){
rep(i,2,50003){
if(!vis[i])p[++cnt]=i;
rep(j,1,cnt){
if(i*p[j]>50000)break;
vis[i*p[j]]=1;
if(i%p[j]==0)break;
}
}
while(~scanf("%d%d",&n,&m)){
memset(g,0,sizeof(g)),memset(f,0,sizeof(f));
rep(i,1,cnt){
if(p[i]>m)break;
g[p[i]]=f[p[i]]=1;
}
int l=1;
for(;l<=m;l<<=1);
ksm(l,n-1);//从1次幂开始乘方,f[0]初值为0是为了强制取恰好n堆
fwt(f,l,-1);
printf("%d\n",f[0]);
}
return 0;
}
[bzoj4589]Hard Nim(FWT快速沃尔什变化+快速幂)的更多相关文章
- BZOJ4589 Hard Nim FWT 快速幂 博弈
原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ4589.html 题目传送门 - BZOJ4589 题意 有 $n$ 堆石子,每一堆石子的取值为 $2$ ...
- BZOJ4589: Hard Nim(FWT 快速幂)
题意 题目链接 Sol 神仙题Orzzzz 题目可以转化为从\(\leqslant M\)的质数中选出\(N\)个\(xor\)和为\(0\)的方案数 这样就好做多了 设\(f(x) = [x \te ...
- bzoj4589: Hard Nim fwt
题意:求n个m以内的素数亦或起来为0的方案数 题解:fwt板子题,先预处理素数,把m以内素数加一遍(下标),然后fwt之后快速幂即可,在ifwt之后a[0]就是答案了 /*************** ...
- 如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案
如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案
- webpack快速入门——webpack3.X 快速上手一个Demo
1.进入根目录,建两个文件夹,分别为src和dist 1).src文件夹:用来存放我们编写的javascript代码,可以简单的理解为用JavaScript编写的模块. 2).dist文件夹:用来存放 ...
- BZOJ4589 Hard Nim(快速沃尔什变换FWT)
这是我第一道独立做出来的FWT的题目,所以写篇随笔纪念一下. (这还要纪念,我太弱了) 题目链接: BZOJ 题目大意:两人玩nim游戏(多堆石子,每次可以从其中一堆取任意多个,不能操作就输).$T$ ...
- 【bzoj4589】Hard Nim FWT+快速幂
题目大意:给你$n$个不大于$m$的质数,求有多少种方案,使得这$n$个数的异或和为$0$.其中,$n≤10^9,m≤10^5$. 考虑正常地dp,我们用$f[i][j]$表示前$i$个数的异或和为$ ...
- BZOJ4589 Hard Nim(博弈+FWT)
即使n个数的异或为0.如果只有两堆,将质数筛出来设为1,做一个异或卷积即可.显然这个东西满足结合律,多堆时直接快速幂.可以在点值表示下进行. #include<iostream> #inc ...
- bzoj千题计划308:bzoj4589: Hard Nim(倍增FWT+生成函数)
https://www.lydsy.com/JudgeOnline/problem.php?id=4589 n*m*m 做法 dp[i][j] 前i堆石子,异或和为j的方案数 第一重循环可以矩阵快速幂 ...
随机推荐
- R语言利用ROCR评测模型的预测能力
R语言利用ROCR评测模型的预测能力 说明 受试者工作特征曲线(ROC),这是一种常用的二元分类系统性能展示图形,在曲线上分别标注了不同切点的真正率与假正率.我们通常会基于ROC曲线计算处于曲线下方的 ...
- python Condition类(锁)
Condition(条件变量)通常与一个锁关联.需要在多个Contidion中共享一个锁时,可以传递一个Lock/RLock实例给构造方法,否则它将自己生成一个RLock实例. 不理解锁的,请看上一条 ...
- Cocos2d Box2D之浮动刚体
| 版权声明:本文为博主原创文章,未经博主允许不得转载. b2_kinematicBody 运动学物体在模拟环境中根据自身的速度进行移动.运动学物体自身不受力的作用.虽然用户可以手动移动它,但是通 ...
- 为什么总是弹出报错“百度未授权使用地图API”?
今天打开网站的时候出现了这个问题“百度未授权使用地图API, 可能是因为您提供的密钥不是有效的百度开放平台密钥或此密钥未对本应用的百度地图JavasoriptAPI授权.…”经过研究终于知道什么原因了 ...
- 转 cpu高 问题分析定位
文章来源: http://www.blogjava.net/hankchen/archive/2012/08/09/377735.html 一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原 ...
- webstorm的下载、破解、与汉化
其实很简单的事情,都被我弄复杂了倒腾了很久,特做个记录. 说明前提,版本为 webstorm 2018.1.4 一.下载webstorom 下载地址:当然去官网啊 https://www.jetbr ...
- how to prevent lowmemorykiller from killing processes
Hi there, I've upgraded a number of test systems to the latest Saucy beta. I've seen quite a few cas ...
- java虚拟机规范(se8)——class文件格式(三)
4.5 字段 字段使用field_info结构来描述. 在同一个class文件中的两个字段不能有相同的名称和描述符. 结构的格式如下: field_info { u2 access_flags; u2 ...
- struts2之ModelDriven
在Struts 2中,提供了另外一种直接使用领域对象的方式,就是让action实现com.opensymphony. xwork2.ModelDriven接口.ModelDriven让你可以直接操作应 ...
- android pull 解析器解析xml文档
person.xml <?xml version="1.0" encoding="UTF-8"?> <persons> <pers ...