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. E-R图

    百度百科:E-R图 100多个数据库,一万多张表,能否使用一张E-R图来表示呢?它是可以的.数据设计依赖于企业的数据,而不是数据库的设计,对企业数据适当做归类,会直接导致数据设计,最终画出E-R图,数 ...

  2. POJ-2773 Happy 2006,暴力2700ms+水过!

                                                         Happy 2006 这个题很可能会超时的,但我几乎暴力的方法2700ms+过了,可能是后台水 ...

  3. _063_Android_Android内存泄露

    深入内存泄露 Android应用的内存泄露,其实就是java虚拟机的堆内存泄漏. 当然,当应用有ndk,jni时,没有及时free,本地堆也会出现内存泄漏. 本文只是针对JVM内存泄漏应用,进行阐述分 ...

  4. HDU 2222 最简单的AC自动机套模板应用

    HDU 2222 题意:给出N(N<=10,000)个单词,每个单词长度不超过50.再给出一个字符串S,字符串长度不超过1,000,000.问有多少个单词出现在了字符串S中.(单词可能重复,单词 ...

  5. java面向对象day01

    前言: 1.首先我们要明白:万物皆对象.现实中存在的事物都是对象.而面向对象技术就是对客观事物进行抽象.2.而java语言是纯面向对象的的语言,它具有描述对象及其相互之间关系的语言成分.3.定义类和建 ...

  6. IO与文件读写---Java的IO流架构

    http://www.blogjava.net/pengpenglin/archive/2010/03/03/314239.html#314399 http://www.blogjava.net/jo ...

  7. 虚拟社会(Virtual Society)

    虚拟社会(Virtual Society),又称赛博社会(Cyber Society),是指不同网民之间经由计算机.远程通讯终端等技术设备相互连接起来以进行信息的共享.互动与交流,并在其中进行社会交往 ...

  8. Robocopy进行大量迁移

    建议使用 Windows Server 2012 R2 或 Windows Server 2012 随附的 Robocopy.exe 版本. 即然官方建议我们用2012或2012R2所带的Roboco ...

  9. 关于对FLASH开发,starling、starling feathers、starling MVC框架的理解

    说在前头:楼主之前没有不论什么flash开发经验,仅仅是从一次尝试中总结自己的理解和经验而已.假设有写的不正确的地方,欢迎大家指正. 前一段时间尝试想用flash(as3)又一次制作一下之前做的一个游 ...

  10. Oracle 模糊查询方法

           在这个信息量剧增的时代,怎样帮助用户从海量数据中检索到想要的数据.模糊查询是不可缺少的. 那么在Oracle中模糊查询是怎样实现的呢?   一.我们能够在where子句中使用likeke ...