zoukankan      html  css  js  c++  java
  • 【HZOI2015】帕秋莉的超级多项式

    题面

    img

    题目分析

    超级模板题:

    多项式乘法

    多项式求逆

    多项式开根

    多项式求导

    多项式求积分

    多项式求对数

    多项式求自然对数为底的指数函数

    多项式快速幂

    代码实现

    #include<iostream>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<cstdio>
    #include<iomanip>
    #include<cstdlib>
    #define MAXN 0x7fffffff
    typedef long long LL;
    const int N=400005,mod=998244353;
    using namespace std;
    inline int Getint(){register int x=0,f=1;register char ch=getchar();while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}return x*f;}
    int ksm(int x,int k){
    	int ret=1;
    	while(k){
    		if(k&1)ret=(LL)ret*x%mod;
    		x=(LL)x*x%mod;
    		k>>=1;
    	}
    	return ret;
    }
    void Der(int *f,int *g,int len){
    	for(int i=0;i<len;i++)g[i]=(LL)f[i+1]*(i+1)%mod;
    	g[len-1]=0;
    }
    void Int(int *f,int *g,int len){
    	for(int i=1;i<len;i++)g[i]=(LL)f[i-1]*ksm(i,mod-2)%mod;
    	g[0]=0;
    }
    void NTT(int *a,int x,int K){
    	static int rev[N],lst;
    	int n=1<<x;
    	if(n!=lst){
    		for(int i=0;i<n;i++)rev[i]=(rev[i>>1]>>1)|((i&1)<<x-1);
    		lst=n;
    	}
    	for(int i=0;i<n;i++)if(i<rev[i])swap(a[i],a[rev[i]]);
    	for(int i=1;i<n;i<<=1){
    		int tmp=i<<1,wn=ksm(3,(mod-1)/tmp);
    		if(K==-1)wn=ksm(wn,mod-2);
    		for(int j=0;j<n;j+=tmp){
    			int w=1;
    			for(int k=0;k<i;k++,w=(LL)w*wn%mod){
    				int x=a[j+k],y=(LL)w*a[i+j+k]%mod;
    				a[j+k]=(x+y)%mod;a[i+j+k]=(x-y+mod)%mod;
    			}
    		}
    	}
    	if(K==-1){
    		int inv=ksm(n,mod-2);
    		for(int i=0;i<n;i++)a[i]=(LL)a[i]*inv%mod;
    	}
    }
    void Inv(int *f,int *g,int len){
    	static int A[N];
    	if(len==1)return g[0]=ksm(f[0],mod-2),void();
    	Inv(f,g,len>>1),copy(f,f+len,A);
    	int x=log2(len<<1),n=1<<x;
    	fill(A+len,A+n,0),fill(g+(len>>1),g+n,0);
    	NTT(A,x,1),NTT(g,x,1);
    	for(int i=0;i<n;i++)g[i]=(mod+2-(LL)A[i]*g[i]%mod)*g[i]%mod;
    	NTT(g,x,-1),fill(g+len,g+n,0);
    }
    const int inv2=(mod+1)/2;
    void Sqrt(int *f,int *g,int len){
    	static int A[N],B[N];
    	if(len==1)return g[0]=sqrt(f[0]),void();
    	Sqrt(f,g,len>>1),Inv(g,B,len);
    	copy(f,f+len,A);
    	int x=log2(len<<1),n=1<<x;
    	fill(A+len,A+n,0),fill(B+len,B+n,0),fill(g+(len>>1),g+n,0);
    	NTT(A,x,1),NTT(B,x,1),NTT(g,x,1);
    	for(int i=0;i<n;i++)g[i]=(g[i]+(LL)A[i]*B[i]%mod)%mod*inv2%mod;
    	NTT(g,x,-1),fill(g+len,g+n,0); 
    }
    void Ln(int *f,int *g,int len){
    	static int A[N],B[N];
    	Der(f,A,len),Inv(f,B,len);
    	int x=log2(len<<1),n=1<<x;
    	fill(A+len,A+n,0),fill(B+len,B+n,0);
    	NTT(A,x,1),NTT(B,x,1);
    	for(int i=0;i<n;i++)A[i]=(LL)A[i]*B[i]%mod;
    	NTT(A,x,-1),Int(A,g,len);
    }
    void Exp(int *f,int *g,int len){
    	static int A[N];
    	if(len==1)return g[0]=1,void();
    	int x=log2(len<<1),n=1<<x;
    	Exp(f,g,len>>1);
    	fill(A+len,A+n,0),fill(g+(len>>1),g+n,0);
    	Ln(g,A,len);
    	A[0]=(f[0]+1-A[0]+mod)%mod;
    	for(int i=1;i<len;i++)A[i]=(f[i]-A[i]+mod)%mod;
    	NTT(A,x,1),NTT(g,x,1);
    	for(int i=0;i<n;i++)g[i]=(LL)g[i]*A[i]%mod;
    	NTT(g,x,-1),fill(g+len,g+n,0); 
    }
    void Pow(int *f,int len,int k){
    	static int A[N];
    	Ln(f,A,len);
    	for(int i=0;i<len;i++)A[i]=(LL)A[i]*k%mod;
    	Exp(A,f,len);
    }
    int a[N],b[N];
    int main(){
    	int n=Getint(),k=Getint();
    	for(int i=0;i<n;i++)a[i]=(Getint()%mod+mod)%mod;
    	int x=ceil(log2(n)),len=1<<x;
    	Sqrt(a,b,len),Inv(b,a,len);
    	Int(a,b,len),Exp(b,a,len);
    	Inv(a,b,len),b[0]++;
    	Ln(b,a,len),a[0]++;
    	Pow(a,len,k),Der(a,b,n);
    	for(int i=0;i<n;i++)cout<<b[i]<<' ';
    	return 0;
    }
    
  • 相关阅读:
    git(1)-git关联GitHub-windows-转载
    jenkins(4)-jenkins配置邮件通知
    jenkins(3)-linux下安装jenkins(yum install方式)
    【PAT甲级】1090 Highest Price in Supply Chain (25 分)(DFS)
    【PAT甲级】1087 All Roads Lead to Rome (30 分)(MAP【int,string】,邻接表,DFS,模拟,SPFA)
    【PAT甲级】1018 Public Bike Management (30 分)(DFS,SPFA)
    Educational Codeforces Round 61 (Rated for Div. 2) G(线段树,单调栈)
    Atcoder Grand Contest 032C(欧拉回路,DFS判环)
    Educational Codeforces Round 62 (Rated for Div. 2)E(染色DP,构造,思维,组合数学)
    Atcoder Grand Contest 031C(构造,思维,异或,DFS)
  • 原文地址:https://www.cnblogs.com/Emiya-wjk/p/10025874.html
Copyright © 2011-2022 走看看