传送门

不难看出就是求\(n\)个小于\(m\)的质数异或和为\(0\)的方案数,可以用\(FWT\)+快速幂解决
(我的代码跑了4500ms……不是很明白那几位52ms的巨巨是怎么做到的……可能是我人傻常数大……也不至于这么大吧……)

//minamoto
#include<cstdio>
#include<cstring>
#define R register
#define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
#define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
const int N=(1<<16)+5,P=1e9+7,inv=500000004;
inline int add(R int x,R int y){return x+y>=P?x+y-P:x+y;}
inline int dec(R int x,R int y){return x-y<0?x-y+P:x-y;}
inline int mul(R int x,R int y){return 1ll*x*y-1ll*x*y/P*P;}
int vis[N],m,n,k;
void init(){vis[1]=1;fp(i,2,50000)if(!vis[i]){for(R int j=(i<<1);j<=50000;j+=i)vis[j]=1;}
}
int A[N],B[N],lim;
void FWT(int *A,int ty){for(R int mid=1;mid<lim;mid<<=1)for(R int j=0;j<lim;j+=(mid<<1))    for(R int k=0;k<mid;++k){int x=A[j+k],y=A[j+k+mid];A[j+k]=add(x,y),A[j+k+mid]=dec(x,y);if(ty==-1)A[j+k]=mul(A[j+k],inv),A[j+k+mid]=mul(A[j+k+mid],inv);}
}
void ksm(int *A,int *B,int y){FWT(A,1),FWT(B,1);while(y){if(y&1)fp(i,0,lim-1)B[i]=mul(B[i],A[i]);fp(i,0,lim-1)A[i]=mul(A[i],A[i]);y>>=1;}FWT(B,-1);
}
int main(){
//  freopen("testdata.in","r",stdin);init();while(~scanf("%d%d",&n,&m)){lim=1;while(lim<=m)lim<<=1;memset(A,0,sizeof(A)),memset(B,0,sizeof(B));fp(i,1,m)A[i]=B[i]=!vis[i];ksm(A,B,n-1);printf("%d\n",B[0]);}return 0;
}

转载于:https://www.cnblogs.com/bztMinamoto/p/10195537.html

bzoj4589: Hard Nim相关推荐

  1. BZOJ4589. Hard Nim

    BZOJ4589. Hard Nim 题意: Claris和NanoApe在玩石子游戏,他们有n堆石子,规则如下: Claris和NanoApe两个人轮流拿石子,Claris先拿. 每次只能从一堆中取 ...

  2. bzoj4589 Hard Nim

    http://www.lydsy.com/JudgeOnline/problem.php?id=4589 题意:石子堆数为N且每堆石子的数量都是不大于M的质数的Nim游戏,求先手必败的局面数量模10^ ...

  3. BZOJ4589: Hard Nim(FWT 快速幂)

    题意 题目链接 Sol 神仙题Orzzzz 题目可以转化为从\(\leqslant M\)的质数中选出\(N\)个\(xor\)和为\(0\)的方案数 这样就好做多了 设\(f(x) = [x \te ...

  4. FFT/NTT/FMT/FWT题目

    快速傅里叶变换FFT hdu4609 3-idiots P4173 残缺的字符串 Hash Function [AH2017/HNOI2017]礼物 CF993E Nikita and Order S ...

  5. [暑假的bzoj刷水记录]

    (这篇我就不信有网站来扣) 这个暑假打算刷刷题啥的 但是写博客好累啊  堆一起算了 隔一段更新一下.  7月27号之前刷的的就不写了 , 写的累 代码不贴了,可以找我要啊.. 2017.8.27upd ...

  6. 解题报告(一)E、(BZOJ4589)Hard Nim(博弈论 + FWT)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  7. 【bzoj3150】 cqoi2013—新Nim游戏

    www.lydsy.com/JudgeOnline/problem.php?id=3105 (题目链接) 题意 在第一个回合中,第一个游戏者可以直接拿走若干个整堆的火柴.可以一堆都不拿,但不可以全部拿 ...

  8. LeetCode实战:Nim 游戏

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 You are pla ...

  9. POJ 1704 Georgia and Bob (Nim游戏变形)

    题目:http://poj.org/problem?id=1704 思路:Nim游戏策略,做如下转换,如果N是偶数,则两两配对,将两个数之间的格子数(距离)看做成这一堆石头的数量. 如果N是奇数,则将 ...

最新文章

  1. 卷积核一定可以提升网络性能吗?-分类0,2
  2. 《大数据》2021年第2期目次摘要
  3. linux 系统错误表 和对应的数值
  4. php是啥_php是什么
  5. [HttpPost] vs [AcceptVerbs(HttpVerbs.Post)]
  6. spider-抓取网页内容(Beautiful soup)
  7. 在Red Hat Enterprise Linux 5 64-bit安装oracle11g r2
  8. linux下无法安装VMware的解决方法
  9. [精简版]CNN巻积层输出size计算公式
  10. [NLP论文阅读]A SIMPLE BUT TOUGH-TO-BEAT BASELINE FOR SENTENCE EMBEDDINGS
  11. 生命科学主要供应商排行榜
  12. 欢迎来到whai的博客
  13. Ubuntu,CentOS安装TIM(QQ),liunx通用
  14. 自学编程,痛并快乐着
  15. NandFlash基础知识-K9F2G08
  16. 华为服务器2288H v3和V5关机不能启动处理
  17. 关于wifi打印服务器方案和USB共享打印机模块工作原理
  18. Html5 获取手机短信号码
  19. mrmr 最大关联度-最小冗余度 特征选择
  20. idea2020shezhi代码检查级别_GitLab 13.1:告警管理扩展,新代码质量工具和安全合规等...

热门文章

  1. mongodb @aggregation 返回字段映射不上_MongoDB---基于分布式文件存储的数据库(二)...
  2. libreportparam2.dll无法继续执行代码_Java并发系列番外(1)——让Thread#stop方法无法终止你的线程...
  3. java程序发送邮件_用java程序发送邮件
  4. qpython3调用adb_Python实现的基于ADB的Android远程工具
  5. 视觉SLAM总结——视觉特征子综述
  6. 【AI产品】产品小姐姐分析抖音背后的计算机视觉技术
  7. 【caffe速成】caffe图像分类从模型自定义到测试
  8. CEF:给客户端内嵌一个Chrome吧
  9. ubuntu 电源按钮操作_桌面应用|在 Ubuntu 中使用 Slimbook Battery Optimizer 切换电源模式...
  10. 阿里PK拼多多-万祥军:丰收节交易会电商谋定农产品市场