bzoj4589: Hard Nim
传送门
不难看出就是求\(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相关推荐
- BZOJ4589. Hard Nim
BZOJ4589. Hard Nim 题意: Claris和NanoApe在玩石子游戏,他们有n堆石子,规则如下: Claris和NanoApe两个人轮流拿石子,Claris先拿. 每次只能从一堆中取 ...
- bzoj4589 Hard Nim
http://www.lydsy.com/JudgeOnline/problem.php?id=4589 题意:石子堆数为N且每堆石子的数量都是不大于M的质数的Nim游戏,求先手必败的局面数量模10^ ...
- BZOJ4589: Hard Nim(FWT 快速幂)
题意 题目链接 Sol 神仙题Orzzzz 题目可以转化为从\(\leqslant M\)的质数中选出\(N\)个\(xor\)和为\(0\)的方案数 这样就好做多了 设\(f(x) = [x \te ...
- FFT/NTT/FMT/FWT题目
快速傅里叶变换FFT hdu4609 3-idiots P4173 残缺的字符串 Hash Function [AH2017/HNOI2017]礼物 CF993E Nikita and Order S ...
- [暑假的bzoj刷水记录]
(这篇我就不信有网站来扣) 这个暑假打算刷刷题啥的 但是写博客好累啊 堆一起算了 隔一段更新一下. 7月27号之前刷的的就不写了 , 写的累 代码不贴了,可以找我要啊.. 2017.8.27upd ...
- 解题报告(一)E、(BZOJ4589)Hard Nim(博弈论 + FWT)
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
- 【bzoj3150】 cqoi2013—新Nim游戏
www.lydsy.com/JudgeOnline/problem.php?id=3105 (题目链接) 题意 在第一个回合中,第一个游戏者可以直接拿走若干个整堆的火柴.可以一堆都不拿,但不可以全部拿 ...
- LeetCode实战:Nim 游戏
背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 You are pla ...
- POJ 1704 Georgia and Bob (Nim游戏变形)
题目:http://poj.org/problem?id=1704 思路:Nim游戏策略,做如下转换,如果N是偶数,则两两配对,将两个数之间的格子数(距离)看做成这一堆石头的数量. 如果N是奇数,则将 ...
最新文章
- 卷积核一定可以提升网络性能吗?-分类0,2
- 《大数据》2021年第2期目次摘要
- linux 系统错误表 和对应的数值
- php是啥_php是什么
- [HttpPost] vs [AcceptVerbs(HttpVerbs.Post)]
- spider-抓取网页内容(Beautiful soup)
- 在Red Hat Enterprise Linux 5 64-bit安装oracle11g r2
- linux下无法安装VMware的解决方法
- [精简版]CNN巻积层输出size计算公式
- [NLP论文阅读]A SIMPLE BUT TOUGH-TO-BEAT BASELINE FOR SENTENCE EMBEDDINGS
- 生命科学主要供应商排行榜
- 欢迎来到whai的博客
- Ubuntu,CentOS安装TIM(QQ),liunx通用
- 自学编程,痛并快乐着
- NandFlash基础知识-K9F2G08
- 华为服务器2288H v3和V5关机不能启动处理
- 关于wifi打印服务器方案和USB共享打印机模块工作原理
- Html5 获取手机短信号码
- mrmr 最大关联度-最小冗余度 特征选择
- idea2020shezhi代码检查级别_GitLab 13.1:告警管理扩展,新代码质量工具和安全合规等...
热门文章
- mongodb @aggregation 返回字段映射不上_MongoDB---基于分布式文件存储的数据库(二)...
- libreportparam2.dll无法继续执行代码_Java并发系列番外(1)——让Thread#stop方法无法终止你的线程...
- java程序发送邮件_用java程序发送邮件
- qpython3调用adb_Python实现的基于ADB的Android远程工具
- 视觉SLAM总结——视觉特征子综述
- 【AI产品】产品小姐姐分析抖音背后的计算机视觉技术
- 【caffe速成】caffe图像分类从模型自定义到测试
- CEF:给客户端内嵌一个Chrome吧
- ubuntu 电源按钮操作_桌面应用|在 Ubuntu 中使用 Slimbook Battery Optimizer 切换电源模式...
- 阿里PK拼多多-万祥军:丰收节交易会电商谋定农产品市场