FWT [BZOJ 4589:Hard Nim]
4589: Hard Nim
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 275 Solved: 152
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
4 13
Sample Output
120
and:

or:

其实公式蛮好推的。。而且也不唯一 比如说 xor 还可以是 A=(A0-A1,A0+A1) 逆A就再反着算一下就可以
还有 FWT只是沿用 FFT和NTT的思想。
【FFT的思想,构造一种可逆的特殊变换trans,使得(trans(a*b))[i]=(trans(a))[i]*(trans(b))[i]。】
但是从界门纲目科属种来看 还是不像FFT与NTT 如此相似。
FWT不需要rev数组 ,举例N=8,下标为0~7。变换的时候,先对01,23,45,67做,再对02,13,46,57做,最后对04,15,26,37做。逆变换把顺序反过来就好了。
而且,这种特殊多项式乘法 满足结合律 ,trans后可以快速幂。
贴本题代码:
#include <bits/stdc++.h>
#define LL long long
const int mo=;
using namespace std;
int x,y,n,m,a[],T,t,f[];
LL po(LL x,LL y){
LL z=;
for (;y;y>>=,x=x*x%mo)
if (y&) z=z*x%mo;
return z;
}
void fwt(int *a,int n,int d){
for (m=;m<=n;m<<=)
for (int i=,k=m>>;i<n;i+=m)
for (int j=i;j<i+k;++j){
int u=a[j],v=a[j+k];
a[j]=(u+v)%mo,a[j+k]=(u-v)%mo;
}
if (d<){
LL x=po(n,mo-);
for (int i=;i<n;++i) a[i]=x*a[i]%mo;
}
}//注意a[i]<0
int main(){
for (int i=;i<=;++i){
if (!a[i]) a[++T]=i;
for (int j=;j<=T;++j){
int x=a[j]*i; if (x>) break;
a[x]=; if (!(i%a[j])) break;
}
}
while (scanf("%d%d",&x,&y)==){
for (t=;a[t]<=y;++t) f[a[t]]=; --t;
for (n=;n<=a[t];n<<=);
fwt(f,n,);
for (int i=;i<n;++i) f[i]=po(f[i],x);
fwt(f,n,-);
printf("%d\n",(f[]+mo)%mo);
for (int i=;i<n;++i) f[i]=;
}
return ;
}
化け物
FWT [BZOJ 4589:Hard Nim]的更多相关文章
- BZOJ 4589 Hard Nim(FWT+博弈论+快速幂)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4589 [题目大意] 有n堆石子,每堆都是m以内的质数,请问后手必胜的局面有几种 [题解 ...
- 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+快速幂】
T了两次之后我突然意识到转成fwt形式之后,直接快速幂每次乘一下最后再逆回来即可,并不需要没此次都正反转化一次-- 就是根据nim的性质,先手必输是所有堆个数异或和为0,也就变成了一个裸的板子 #in ...
- BZOJ.4589.Hard Nim(FWT)
题目链接 FWT 题意即,从所有小于\(m\)的质数中,选出\(n\)个数,使它们异或和为\(0\)的方案数. 令\(G(x)=[x是质数]\),其实就是对\(G(x)\)做\(n\)次异或卷积后得到 ...
- BZOJ 4589 Hard Nim ——FWT
[题目分析] 位运算下的卷积问题. FWT直接做. 但还是不太民白,发明者要承担泽任的. [代码] #include <cstdio> #include <cstring> # ...
- [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[<< ...
随机推荐
- 67. @Transactional的类注入失败【从零开始学Spring Boot】
[从零开始学习Spirng Boot-常见异常汇总] Spring的代理模式有两种:java自带的动态代理模式和cglib代理模式,cglib代码模式适用于没有接口的类,而java自带适用于接口类,默 ...
- 【转】关于大型网站技术演进的思考(二十)--网站静态化处理—web前端优化—中(12)
Web前端很多优化原则都是从如何提升网络通讯效率的角度提出的,但是这些原则使用的时候还是有很多陷阱在里面,如果我们不能深入理解这些优化原则背后所隐藏的技术原理,很有可能掉进这些陷阱里,最终没有达到最佳 ...
- hdu 1325数据弱
#include<stdio.h>//判断是否有环,判断是否有点,判断是否是一个父节点 #include<string.h> #define N 1000000 int pre ...
- bzoj1086 [SCOI2005]王室联邦 树分块
[bzoj1086][SCOI2005]王室联邦 2014年11月14日2,6590 Description “余”人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的 ...
- 数字游戏(codevs 1085)
题目描述 Description 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共 ...
- Codevs 2666 2666 Accept Ratio
时间限制: 1 s 空间限制: 32000 KB 题目等级 : 钻石 Diamond 题目描述 Description 某陈痴迷于pku的ACM题库,常常彻夜奋斗刷题.他最近的目标是在NOIP0 ...
- delightful world--计蒜客(DFS)
http://nanti.jisuanke.com/t/11067 题目大意: 给你一个n和m 下面是m个字符串和k 每一字符串的长度是n 你要找一个串跟每一个串匹配 有k个字符是和这个串相 ...
- Python---django轻量级框架
Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...
- html5摇一摇代码优化
首先对DeviceMotionEvent进行优化: 去除没用的代码,又一次封装DeviceMotionEven if(window.DeviceMotionEvent) { var speed = 2 ...
- Zookeeper 简单操作
1. 连接到zookeeper服务 [java2000_wl@localhost zookeeper-3]$ bin/zkCli.sh -server 127.0.0.1:2181 也可以连接远端的 ...