bzoj4589 FWT xor版本
4589: Hard Nim
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 865 Solved: 484
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
4 13
Sample Output
120
HINT
Source
Topcoder SRM 518 Div1 Hard Nim By Tangjz
这题是一个NIM游戏,根据结论,先手输的情况只有所有的石子数xor起来的数为0
https://blog.csdn.net/jr_mz/article/details/51606673
这个blog比我自己瞎比比好多了。
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstdio> #define N 50007
#define ll long long
#define P 1000000007
#define inv 500000004
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
} int n,m,len,num;
ll A[(<<)+],B[(<<)+];
int pri[N],np[N]; void FWT(ll *a,int flag)
{
ll x,y;
for (int h=;h<len;h<<=)
for(int j=;j<len;j+=(h<<))
for(int k=j;k<j+h;k++)
{
if (flag==) x=a[k],y=a[k+h],a[k]=(x+y)%P,a[k+h]=(x-y+P)%P;
else x=a[k],y=a[k+h],a[k]=(x+y)*inv%P,a[k+h]=((x-y)*inv%P+P)%P;
}
}
void pow(ll *a,ll y)
{
ll *b=B;b[]=;
FWT(a,),FWT(b,);
while(y)
{
if(y&) for(int i=;i<len;i++) b[i]=a[i]*b[i]%P;
for(int i=;i<len;i++)
a[i]=a[i]*a[i]%P;
y>>=;
}
FWT(b,-);
}
int main()
{
for(int i=;i<=;i++)
{
if(!np[i]) pri[++num]=i;
for(int j=;j<=num&&i*pri[j]<=;j++)
{
np[i*pri[j]]=;
if(i%pri[j]==) break;
}
}
while(~scanf("%d%d",&n,&m))
{
for(len=;len<=m;len<<=);
memset(A,,sizeof(A));
memset(B,,sizeof(B));
for(int i=;i<=num&&pri[i]<=m;i++)
A[pri[i]]=;
pow(A,n);
printf("%lld\n",B[]);
}
}
bzoj4589 FWT xor版本的更多相关文章
- NTT FWT(xor or and) 模板
void nnt(int a[],int len,int on) { ;i<len;i++) if(i<r[i]) swap(a[i],a[r[i]]); ;i<len;i<& ...
- [FWT] UOJ #310. 【UNR #2】黎明前的巧克力
[uoj#310][UNR #2]黎明前的巧克力 FWT - GXZlegend - 博客园 f[i][xor],考虑优化暴力,暴力就是FWT xor一个多项式 整体处理 (以下FWT代表第一步) F ...
- 【洛谷4717】【模板】快速沃尔什变换(FWT模板)
点此看题面 大致题意: 有两个长度为\(2^n\)的数组\(A,B\),且\(C_i=\sum_{j⊕k==i}A_jB_k\)分别求出当\(⊕\)为\(or,and,xor\)时的\(C\)数组. ...
- 浅谈算法——FWT(快速沃尔什变换)
其实FWT我啥都不会,反正就是记一波结论,记住就好-- 具体证明的话,推荐博客:FWT快速沃尔什变换学习笔记 现有一些卷积,形如 \(C_k=\sum\limits_{i\lor j=k}A_i*B_ ...
- FMT/FWT学习笔记
目录 FMT/FWT学习笔记 FMT 快速莫比乌斯变换 OR卷积 AND卷积 快速沃尔什变换(FWT/XOR卷积) FMT/FWT学习笔记 FMT/FWT是算法竞赛中求or/and/xor卷积的算法, ...
- single number和变体
给array of integers. 裡面有一个数字是单独出现 其他都会出现两次(而且一起出现)ex: [1,2,2,3,3]要判断哪个数字是单独出现的. 以这个例子的话就是 1 LZ 一开始先说 ...
- loj#2340. 「WC2018」州区划分
FWT&&FMT板子 #include<cstdio> #include<iostream> #include<cstring> #include& ...
- BZOJ4589 Hard Nim FWT 快速幂 博弈
原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ4589.html 题目传送门 - BZOJ4589 题意 有 $n$ 堆石子,每一堆石子的取值为 $2$ ...
- BZOJ4589 Hard Nim(博弈+FWT)
即使n个数的异或为0.如果只有两堆,将质数筛出来设为1,做一个异或卷积即可.显然这个东西满足结合律,多堆时直接快速幂.可以在点值表示下进行. #include<iostream> #inc ...
随机推荐
- 生产Web架构优化方案(动态转静态)
Infi-chu: http://www.cnblogs.com/Infi-chu/ 一.门户新闻业务: 1. 特点:网页一旦发布,再次改动网页内容的几率很低,新闻业务内容的静态化相对比较简单 2. ...
- python2.7练习小例子(十八)
19):题目:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程找出1000以内的所有完数. #!/usr/bin/python # -*- ...
- Vue 去脚手架插件,自动加载vue文件,style怎么办
书接上上会,因为当时也没想好怎么办,所以装聋作哑的忽略了Vue文件中的Style,Vue的做法我看着晕乎乎的,细想的话,无非就是自动填写到dom中,所担心的无非是命名冲突. 在一个项目中(像我这种自娱 ...
- 第四模块:网络编程进阶&数据库开发 考核实战
1.什么是进程?什么是线程? 什么是协程? 进程:正在进行的一个过程或者说一个任务.而负责执行任务则是cpu. 线程:在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 协程是一种用 ...
- ArrayMap java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Object[]
错误堆栈: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Object[] at android ...
- 【题解搬运】PAT_A1020 树的遍历
题目 Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder an ...
- Halcon环境搭建
1.Visual Studio 2017安装教程 2.Qt5.9安装教程 3.VS2017中Qt插件安装教程
- (原创)像极了爱情的详解排序二叉树,一秒get
排序二叉树(建立.查找.删除) 二叉树我们已经非常熟悉了,但是除了寻常的储存数据.遍历结构,我们还能用二叉树做什么呢? 我们都知道不同的遍历方式会对相同的树中产生不同的序列结果,排序二叉树就是利用二叉 ...
- git - work flow
git status – Make sure your current area is clean. git pull – Get the latest version from the remote ...
- postgres(pl/pgsql)
复制后期看 https://www.cnblogs.com/stephen-liu74/archive/2012/06/06/2312759.html https://www.cnblogs.com/ ...