思路:

最裸的方程:f[i][j]=Σf[i-1][j-k]*F[k]

诶呦 这不是卷积嘛

f[i]就可以用f[i-1]卷F 求到

但是这样还是很慢

设p[i] 为Σ f[j](1<=j<=i)

发现p可以倍增推

于是  就 倍增一下  就完了...

http://www.cnblogs.com/Skyminer/p/6561689.html

hz神犇的题解写得非常详细..

//By SiriusRen
#include <cmath>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N=;
const double pi=acos(-);
int n,M,P,A,O,S,U,L,R[N],F[N],g[N],p[N],t[N],ans;
struct cplxd{double x,y;cplxd(){}cplxd(double X,double Y){x=X,y=Y;}}ca[N],cb[N],cc[N];
cplxd operator+(cplxd a,cplxd b){return cplxd(a.x+b.x,a.y+b.y);}
cplxd operator-(cplxd a,cplxd b){return cplxd(a.x-b.x,a.y-b.y);}
cplxd operator*(cplxd a,cplxd b){return cplxd(a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x);}
cplxd operator/(cplxd a,int b){return cplxd(a.x/b,a.y/b);}
void FFT(cplxd *a,int f){
for(int i=;i<n;i++)if(i<R[i])swap(a[i],a[R[i]]);
for(int i=;i<n;i<<=){
cplxd wn=cplxd(cos(pi/i),f*sin(pi/i));
for(int j=;j<n;j+=(i<<)){
cplxd w(,);
for(int k=;k<i;k++,w=w*wn){
cplxd x=a[j+k],y=w*a[j+k+i];
a[j+k]=x+y,a[j+k+i]=x-y;
}
}
}
if(f==-)for(int i=;i<n;i++)a[i]=a[i]/n;
}
void Pw(int *a,int *b,int *c){
for(int i=;i<n;i++)ca[i]=cplxd(a[i],);
for(int i=;i<n;i++)cb[i]=cplxd(b[i],);
FFT(ca,),FFT(cb,);
for(int i=;i<n;i++)cc[i]=ca[i]*cb[i];
FFT(cc,-);
for(int i=;i<=M;i++)c[i]=((int)(0.3+cc[i].x))%P;
}
void pow(int k){
if(k==)return;
pow(k>>);
Pw(p,g,t),Pw(g,g,g);
for(int i=;i<=M;i++)(p[i]+=t[i])%=P;
if(k&){
Pw(g,F,g);
for(int i=;i<=M;i++)(p[i]+=g[i])%=P;
}
}
signed main(){
scanf("%d%d%d%d%d%d",&M,&P,&A,&O,&S,&U);
for(n=;n<=M*;n<<=)L++;
for(int i=;i<=n;i++)R[i]=(R[i>>]>>)|((i&)<<(L-));
for(int i=;i<=M;i++)p[i]=g[i]=F[i]=(i*i*O+S*i+U)%P;
pow(A),printf("%d\n",p[M]);
}

BZOJ 4332 FFT+快速幂的更多相关文章

  1. BZOJ 3160: 万径人踪灭 FFT+快速幂+manacher

    BZOJ 3160: 万径人踪灭 题目传送门 [题目大意] 给定一个长度为n的01串,求有多少个回文子序列? 回文子序列是指从原串中找出任意个,使得构成一个回文串,并且位置也是沿某一对称轴对称. 假如 ...

  2. 【BZOJ 4332】 4332: JSOI2012 分零食 (FFT+快速幂)

    4332: JSOI2012 分零食 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 119  Solved: 66 Description 这里是欢乐 ...

  3. bzoj 4332 FFT型的快速幂(需要强有力的推导公式能力)

     有n个小朋友,m颗糖,你要把所有糖果分给这些小朋友. 规则第 i 个小朋友没有糖果,那么他之后的小朋友都没有糖果..如果一个小朋友分到了 xx 个糖果,那么的他的权值是 f(x) = ox^2 +  ...

  4. 【codeforces 623E】dp+FFT+快速幂

    题目大意:用$[1,2^k-1]$之间的证书构造一个长度为$n$的序列$a_i$,令$b_i=a_1\ or\ a_2\ or\ ...\ or a_i$,问使得b序列严格递增的方案数,答案对$10^ ...

  5. P3321 [SDOI2015]序列统计 FFT+快速幂+原根

    \(\color{#0066ff}{ 题目描述 }\) 小C有一个集合S,里面的元素都是小于M的非负整数.他用程序编写了一个数列生成器,可以生成一个长度为N的数列,数列中的每个数都属于集合S.小C用这 ...

  6. BZOJ 2179: FFT快速傅立叶

    2179: FFT快速傅立叶 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 2923  Solved: 1498[Submit][Status][Di ...

  7. bzoj(矩阵快速幂)

    题意:定义Concatenate(1,N)=1234567……n.比如Concatenate(1,13)=12345678910111213.给定n和m,求Concatenate(1,n)%m. (1 ...

  8. bzoj 4000 矩阵快速幂优化DP

    建立矩阵,跑快速幂 /************************************************************** Problem: 4000 User: idy002 ...

  9. bzoj 2326 矩阵快速幂

    思路:矩阵快速幂搞一搞. #include<bits/stdc++.h> #define LL long long #define fi first #define se second # ...

随机推荐

  1. 用u盘安装黑苹果10.12.3

    链接: https://pan.baidu.com/s/1eR9GgwE 密码: rubh 主机和显示器必须是数字口连接,如dvi.displayport,VGA不能进安装界面 下载苹果镜像文件10. ...

  2. select 如何将文本居中

    开始测试了几种方式但是结果都是失败的,最后测试一种方式终于成功了,所以做下笔记: select{ width: 3.2rem; height: 1.2rem; border-radius: 0.6re ...

  3. 293. [NOI2000] 单词查找树——COGS

    293. [NOI2000] 单词查找树 ★★   输入文件:trie.in   输出文件:trie.out   简单对比时间限制:1 s   内存限制:128 MB 在进行文法分析的时候,通常需要检 ...

  4. uva 1586 Molar mass(Uva-1586)

    这题做的相当的复杂...之前做的现在应该能简单一点了写的. 我的代码: #include <bits/stdc++.h> using namespace std; main() { int ...

  5. python 列出出当前目录及所有子目录下的文件

    [root@web1 test]# cat walk.py #!/usr/bin/python # -*- coding: UTF-8 -*- import os for root, dirs, fi ...

  6. Git:分支的创建、合并、管理和删除

    了解分支 如果想实现多人协作.划出Bug区.Feature区等功能,就需要分支功能.(确实很强大的地方) 每次commit时,Git都把它们串成一条时间线,这条时间线就是一个分支.截止到目前,只有一条 ...

  7. [cogs461] [网络流24题#10] 餐巾 [网络流,最小费用最大流]

    建图:从源点向第一层连边,第一层表示当天用掉多少餐巾,第二层表示当天需要多少餐巾,所以注意购买餐巾的边容量为无穷大,要从源点开始连向第二层的点,每天可能有剩余,在第一层内表示为流入第二天的节点.具体见 ...

  8. M - Substrings

    You are given a number of case-sensitive strings of alphabetic characters, find the largest string X ...

  9. ZooKeeper动态增加Server(动态增加节点)的研究(待实践)

    说明:是动态增加Server,不是动态增加连接到ZK Server的Client. 场景如下(转自外文): 1.在t=t_1->[peer-1(Leader),peer-2],peer-1是主节 ...

  10. [MongoDB]安装 MongoDB 数据库

    1.tar zxvf mongodb.tgz 2.vim ~/.bashrc  增加 MONGODB_HOME 并添加bin到PATH ,source ~/.bashrc 3.mongod -vers ...