Nim
来源:互联网 发布:在mac上使用iphone 编辑:程序博客网 时间:2024/05/14 12:03
FWT模板
还没搞懂And..
那就先把Or和Xor写一下好了
#include<cstdio>#include<iostream>#include<cstring>#include<cstdlib>using namespace std;const int P=1000000007;const int N=66000;int n,m,k,i,j,a[N];bool v[N];inline void UFWT(){ for(int d=1;d<k;d<<=1) for(int m=d<<1,i=0;i<k;i+=m) for(int j=0;j<d;j++) { int x=a[i+j],y=a[i+j+d]; a[i+j]=500000004ll*(x+y)%P,a[i+j+d]=500000004ll*(x-y+P)%P;//Xor // a[i+j]=a[i+j],a[i+j+d]=(a[i+j]+a[i+j+d])%P; Or }}inline void FWT(){ for(int d=1;d<k;d<<=1) for(int m=d<<1,i=0;i<k;i+=m) for(int j=0;j<d;j++) { int x=a[i+j],y=a[i+j+d]; a[i+j]=(x+y)%P,a[i+j+d]=(x-y+P)%P;//Xor // a[i+j]=a[i+j],a[i+j+d]=(P+a[i+j]-a[i+j+d])%P; Or }}inline int pow(int a,int b){int t=1;for(int tt=b;tt;tt>>=1,a=a*1ll*a%P)if(tt&1)t=t*1ll*a%P;return t;}int main(){ for(i=2;i<N;i++)if(!v[i])for(j=i+i;j<N;j+=i)v[j]=1; while(scanf("%d%d",&n,&m)==2) { for(k=1;k<=m;k<<=1); for(i=0;i<k;i++)a[i]=0; for(i=2;i<k&&i<=m;i++)if(!v[i])a[i]=1; FWT(); for(i=0;i<k;i++)a[i]=pow(a[i],n); UFWT(); printf("%d\n",a[0]); } return 0;}
0 0
- nim
- Nim
- Nim
- Nim
- (博弈Nim)Nim
- POJ_2975 Nim(Nim)
- Nim游戏 Nim Game
- nim游戏
- [poj2975]Nim
- Nim游戏
- nim 博弈
- ZOJ3591 Nim
- NIM游戏
- 1.11 nim
- Nim游戏
- Nim游戏
- Nim 游戏
- POJ2068 Nim
- 关机/重启命令
- 开博客啦~~
- [Ruby笔记]4. ruby 读写文件 File open read write new
- 标准库类型——string
- Linux系统搭建SVN服务
- Nim
- Javascript基础知识盲点总结——对象
- Leek' music diary 1
- 编译生成动态库文件
- iOS分享 - 对象间的通信之delegate、notificationCenter与block
- 信息论及其若干结论和部分证明过程
- MongoDB MapReduce 性能提升20倍的优化宝典
- udev实现动态设备命名
- POJ 1269 Intersecting Lines(判断两条线段关系)