4589: Hard Nim

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 275  Solved: 152
[Submit][Status][Discuss]

Description

 
 
Claris和NanoApe在玩石子游戏,他们有n堆石子,规则如下:
1. Claris和NanoApe两个人轮流拿石子,Claris先拿。
2. 每次只能从一堆中取若干个,可将一堆全取走,但不可不取,拿到最后1颗石子的人获胜。
不同的初始局面,决定了最终的获胜者,有些局面下先拿的Claris会赢,其余的局面Claris会负。
Claris很好奇,如果这n堆石子满足每堆石子的初始数量是不超过m的质数,而且他们都会按照最优策略玩游戏,那么NanoApe能获胜的局面有多少种。
由于答案可能很大,你只需要给出答案对10^9+7取模的值。
 
 

Input

输入文件包含多组数据,以EOF为结尾。
对于每组数据:
共一行两个正整数n和m。
每组数据有1<=n<=10^9, 2<=m<=50000。
不超过80组数据。
 

Output

 

Sample Input

3 7
4 13

Sample Output

6
120
 
 
其实这题和上午XJOI里的T3差不多。
具体做法请看别人博客http://blog.csdn.net/jr_mz/article/details/51606673
然而 问题来了。第一次我TLE了,交了Mz的代码 发现他只要6s。
然后仔细对比。。。看了好久祝天然的代码。 得出结论【啊首先 只要不开LL就不会TLE。但是时间的瓶颈不在这。】:
  FWT的数组n(是2的幂、当然)只要大于(注意是严格大于。否则就WA了)其中的任意一个元素就可以。
 
恩。再贴一下各种FWT的公式
xor:

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]的更多相关文章

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

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

  2. bzoj 4589 Hard Nim——FWT

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

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

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

  4. bzoj 4589 Hard Nim —— FWT

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

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

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

  6. BZOJ.4589.Hard Nim(FWT)

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

  7. BZOJ 4589 Hard Nim ——FWT

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

  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. 重写jQuery serialize方法,使文本框在没有输入的情况下,使用其支持默认值

    未压缩版 jQuery.fn.extend({ serialize:function() { return jQuery.param(this.serializeArray()); }, serial ...

  2. [NOIP2002] 提高组 洛谷P1033 自由落体

    题目描述 在高为 H 的天花板上有 n 个小球,体积不计,位置分别为 0,1,2,….n-1.在地面上有一个小车(长为 L,高为 K,距原点距离为 S1).已知小球下落距离计算公式为 d=1/2*g* ...

  3. BZOJ1744: [Usaco2005 oct]Skiing 奶牛滑雪

    n<=100 * m<=100的地图,每个数绝对值不超过25,从1,1到n,m,一开始速度v,从数字A走到数字B速度会变成v*2^(A-B),求到终点最短时间. 可以发现,相同的数字出发的 ...

  4. msp430项目编程32

    msp430中项目---电阻测量系统32                  Ad 1.电路工作原理 2.代码(显示部分) 3.代码(功能实现) 4.项目总结

  5. PAT (Advanced Level) 1038. Recover the Smallest Number (30)

    注意前导零的消去. #include <iostream> #include <string> #include <sstream> #include <al ...

  6. PAT (Advanced Level) 1031. Hello World for U (20)

    简单题. #include<iostream> #include<cstring> #include<cmath> #include<algorithm> ...

  7. List排列组合

    /** * 步骤::每次递归时,把原始数据和满足条件的工作空间复制一份,所有的操作均在复制文件中进行,目的就是保证不破坏原始数据, * 从而可以让一轮递归结束后可以正常进行下一轮. * 其次,把数据的 ...

  8. jmeter的jmx脚本结构解析

    jmeter的jmx脚本是xml文档,简单分析下其结构 xml是树形结构:jmeter界面的树形结构就是xml的结构 一级目录: 二级目录:在一级目录右键后可以看到的,都可以做为二级目录 三级目录.n ...

  9. IOS开发 序列化与反序列化

    原帖地址:http://blog.csdn.net/ally_ideveloper/article/details/7956942 不会用,记下自己有时间看 序列化与反序列化概述 序列化,它又称串行化 ...

  10. 关闭Windows 2003/2008中IE增强的安全配置的方法

           在使用Windows Server 2003/2008操作系统时,打开IE浏览网页时,发现浏览器总提示 "是否需要将当前访问的网站添加到自己信任的站点中去",要是不信 ...