bzoj千题计划308:bzoj4589: Hard Nim(倍增FWT+生成函数)
https://www.lydsy.com/JudgeOnline/problem.php?id=4589
n*m*m 做法
dp[i][j] 前i堆石子,异或和为j的方案数
第一重循环可以矩阵快速幂优化
后面求出序列的生成函数可以FWT优化
做log次FWT也很慢(logn*m*logm)
两个合并就是倍增FWT,即先对生成函数的序列做一次正变换,对正变换得到的每个结果快速幂,最后逆变换回去
时间复杂度O(logn*m+m*logm)
生成函数:是质数则系数为1,否则为0
- #include<cstdio>
- #include<cstring>
- using namespace std;
- #define N 50001
- const int mod=1e9+;
- const int M=<<;
- int inv;
- int a[N];
- int b[M+];
- void FWT(int *a,int n)
- {
- int x,y;
- for(int d=;d<n;d<<=)
- for(int m=d<<,i=;i<n;i+=m)
- for(int j=;j<d;++j)
- {
- x=a[i+j]; y=a[i+j+d];
- a[i+j]=x+y; a[i+j+d]=x-y;
- a[i+j]-=a[i+j]>=mod ? mod : ;
- a[i+j+d]+=a[i+j+d]< ? mod : ;
- }
- }
- void IFWT(int *a,int n)
- {
- int x,y;
- for(int d=;d<n;d<<=)
- for(int m=d<<,i=;i<n;i+=m)
- for(int j=;j<d;++j)
- {
- x=a[i+j]; y=a[i+j+d];
- a[i+j]=1LL*(x+y)*inv%mod;
- a[i+j+d]=1LL*(x-y+mod)%mod*inv%mod;
- }
- }
- int Pow(int a,int b)
- {
- int res=;
- for(;b;a=1LL*a*a%mod,b>>=)
- if(b&) res=1LL*res*a%mod;
- return res;
- }
- int main()
- {
- for(int i=;i<N;++i) a[i]=;
- for(int i=;i<N;++i)
- if(a[i])
- for(int j=;i*j<N;++j)
- a[i*j]=;
- inv=Pow(,mod-);
- int n,m;
- int len;
- while(scanf("%d%d",&n,&m)!=EOF)
- {
- memset(b,,sizeof(b));
- for(int i=;i<=m;++i) b[i]=a[i];
- len=;
- while(len<=m) len<<=;
- FWT(b,len);
- for(int i=;i<len;++i) b[i]=Pow(b[i],n);
- IFWT(b,len);
- printf("%d\n",b[]);
- }
- }
bzoj千题计划308:bzoj4589: Hard Nim(倍增FWT+生成函数)的更多相关文章
- bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块
http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...
- bzoj千题计划196:bzoj4826: [Hnoi2017]影魔
http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...
- bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪
http://www.lydsy.com/JudgeOnline/problem.php?id=4592 注意操作1 先挖再补,就是补的范围可以包含挖的范围 SHOI2015 的题 略水啊(逃) #i ...
- bzoj千题计划177:bzoj1858: [Scoi2010]序列操作
http://www.lydsy.com/JudgeOnline/problem.php?id=1858 2018 自己写的第1题,一遍过 ^_^ 元旦快乐 #include<cstdio> ...
- bzoj千题计划317:bzoj4650: [Noi2016]优秀的拆分(后缀数组+差分)
https://www.lydsy.com/JudgeOnline/problem.php?id=4650 如果能够预处理出 suf[i] 以i结尾的形式为AA的子串个数 pre[i] 以i开头的形式 ...
- bzoj千题计划304:bzoj3676: [Apio2014]回文串(回文自动机)
https://www.lydsy.com/JudgeOnline/problem.php?id=3676 回文自动机模板题 4年前的APIO如今竟沦为模板,,,╮(╯▽╰)╭,唉 #include& ...
- bzoj千题计划292:bzoj2244: [SDOI2011]拦截导弹
http://www.lydsy.com/JudgeOnline/problem.php?id=2244 每枚导弹成功拦截的概率 = 包含它的最长上升子序列个数/最长上升子序列总个数 pre_len ...
- bzoj千题计划278:bzoj4590: [Shoi2015]自动刷题机
http://www.lydsy.com/JudgeOnline/problem.php?id=4590 二分 这么道水题 没long long WA了两发,没判-1WA了一发,二分写错WA了一发 最 ...
- bzoj千题计划250:bzoj3670: [Noi2014]动物园
http://www.lydsy.com/JudgeOnline/problem.php?id=3670 法一:KMP+st表 抽离nxt数组,构成一棵树 若nxt[i]=j,则i作为j的子节点 那么 ...
随机推荐
- 【UOJ347】【WC2018】通道 边分治 虚树 DP
题目大意 给你三棵树,点数都是\(n\).求 \[ \max_{i,j}d_1(i,j)+d_2(i,j)+d_3(i,j) \] 其中\(d_k(i,j)\)是在第\(k\)棵数中\(i,j\)两点 ...
- 基于vue制作简易的柱状图
一般很常见的柱状图,大家都想到用百度echart,如果整个项目就只绘制仅有的一个柱状图,引入echart就有点大材小用了,哈哈哈. 预览地址:https://zuobaiquan.github.io/ ...
- optimize PHP-FPM优化
php-fpm进程pidpids=$(ps aux | grep ${process} | grep -v "grep" | awk '{print $2}') php-fpm 关 ...
- luogu5019 [NOIp2018]铺设道路 (贪心)
和NOIp2013 积木大赛一模一样 我在堆一格的时候,我把它尽量地往右去延伸 于是如果对于一个i,a[i-1]<a[i],那i在之前一定只堆过a[i-1]那么多,所以要再堆a[i]-a[i-1 ...
- HDU 6319 Problem A. Ascending Rating(单调队列)
要求一个区间内的最大值和每次数过去最大值更新的次数,然后求每次的这个值异或 i 的总和. 这个序列一共有n个数,前k个直接给出来,从k+1到n个数用公式计算出来. 因为要最大值,所以就要用到单调队列, ...
- 【mysql】mysql null值
在数据表我们有时候有些表字段会为null,表示空.其实在mysql中null值是占用空间的. mysql手册如下解释 NULL columns require additional space in ...
- MySQL数据库的基本使用简单易懂
MySQL数据库的基本使用 一.数据库概述 1. 基本介绍 数据库就是以一定格式进行组织的数据的集合.通俗来看数据库就是用户计算机上 一些具有特殊格式的数据文件的集合 2. 数据库的特点 持久化存储 ...
- js 获取随机数 Math.random()
js 获取随机数 Math.random() // 结果为0-1间的一个随机数(包括0,不包括1) var randomNum1 = Math.random(); //console.log(rand ...
- .Net Core Nlog日志记录到MySql
前段时间想要实现这个功能网上找了很多资料,现在整理一下发布出来,希望给大家一点帮助. 首先是依赖项的选择: 关于NLog版本不是最新是因为最新版本有点问题我试了试不支持,所以选了这几个版本,MySql ...
- Dreamweaver - <!DOCTYPE html>
最近设计网页,很多使用 <!DOCTYPE html> 关于<!DOCTYPE html>的详细介绍: http://www.w3school.com.cn/tags/tag_ ...