【Cogs2187】帕秋莉的超级多项式(多项式运算)

题面

Cogs

题解

多项式运算模板题

只提供代码了。。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define ll long long
#define RG register
#define MAX 444444
const int MOD=998244353;
const int Phi=MOD-1;
const int gr=3;
inline int read()
{
RG int x=0,t=1;RG char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=-1,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return x*t;
}
int fpow(int a,int b)
{
int s=1;
while(b){if(b&1)s=1ll*s*a%MOD;a=1ll*a*a%MOD;b>>=1;}
return s;
}
int r[MAX],N,l,M;
int Og[MAX];
void NTT(int *P,int opt,int n)
{
for(N=1,l=0;N<n;N<<=1)++l;
for(RG int i=0;i<N;++i)r[i]=(r[i>>1]>>1)|((i&1)<<(l-1));
for(RG int i=0;i<N;++i)if(i<r[i])swap(P[i],P[r[i]]);
for(RG int i=1;i<N;i<<=1)
{
RG int W=fpow(gr,Phi/(i<<1));Og[0]=1;
for(RG int j=1;j<i;++j)Og[j]=1ll*Og[j-1]*W%MOD;
for(RG int p=i<<1,j=0;j<N;j+=p)
for(RG int k=0;k<i;++k)
{
RG int X=P[j+k],Y=1ll*Og[k]*P[i+j+k]%MOD;
P[j+k]=(X+Y)%MOD;P[i+j+k]=(X+MOD-Y)%MOD;
}
}
if(opt==-1)
{
reverse(&P[1],&P[N]);
for(RG int i=0,inv=fpow(N,MOD-2);i<N;++i)P[i]=1ll*P[i]*inv%MOD;
}
}
int inv[MAX];
void initinv(int N)
{
inv[0]=inv[1]=1;
for(RG int i=2;i<N;++i)inv[i]=1ll*inv[MOD%i]*(MOD-MOD/i)%MOD;
}
int A[MAX],B[MAX];
void Inv(int *a,int *b,int len)
{
if(len==1){b[0]=fpow(a[0],MOD-2);return;}
Inv(a,b,len>>1);
for(RG int i=0;i<len;++i)A[i]=a[i],B[i]=b[i];
NTT(A,1,len<<1);NTT(B,1,len<<1);
for(RG int i=0;i<(len<<1);++i)A[i]=1ll*A[i]*B[i]%MOD*B[i]%MOD;
NTT(A,-1,len<<1);
for(RG int i=0;i<len;++i)b[i]=(b[i]+b[i])%MOD;
for(RG int i=0;i<len;++i)b[i]=(b[i]+MOD-A[i])%MOD;
for(RG int i=0;i<(len<<1);++i)A[i]=B[i]=0;
}
int C[MAX],D[MAX],inv2=fpow(2,MOD-2);
void Sqrt(int *a,int *b,int len)
{
if(len==1){b[0]=sqrt(a[0]);return;}
Sqrt(a,b,len>>1);
for(RG int i=0;i<=len;++i)C[i]=a[i];
Inv(b,D,len);
NTT(C,1,len<<1);NTT(D,1,len<<1);
for(RG int i=0;i<(len<<1);++i)D[i]=1ll*C[i]*D[i]%MOD;
NTT(D,-1,len<<1);
for(RG int i=0;i<len;++i)b[i]=1ll*(b[i]+D[i])%MOD*inv[2]%MOD;
for(RG int i=0;i<=(len<<1);++i)C[i]=D[i]=0;
}
void Dao(int *a,int *b,int len)
{
for(RG int i=1;i<len;++i)b[i-1]=1ll*i*a[i]%MOD;
b[len]=b[len-1]=0;
}
void Jifen(int *a,int *b,int len)
{
for(RG int i=1;i<len;++i)b[i]=1ll*a[i-1]*inv[i]%MOD;
b[0]=0;
}
void Getln(int *a,int *b,int len)
{
int A[MAX],B[MAX];
memset(A,0,sizeof(A));memset(B,0,sizeof(B));
Dao(a,A,len);
Inv(a,B,len);
NTT(A,1,len<<1);NTT(B,1,len<<1);
for(RG int i=0;i<(len<<1);++i)A[i]=1ll*A[i]*B[i]%MOD;
NTT(A,-1,len<<1);
Jifen(A,b,len);
for(RG int i=0;i<(len<<1);++i)A[i]=B[i]=0;
}
int E[MAX];
void Exp(int *a,int *b,int len)
{
if(len==1){b[0]=1;return;}
Exp(a,b,len>>1);
for(RG int i=0;i<len;++i)D[i]=b[i];
Getln(b,E,len);
for(RG int i=0;i<len;++i)E[i]=(MOD-E[i]+a[i])%MOD;E[0]=(E[0]+1)%MOD;
NTT(E,1,len<<1);NTT(D,1,len<<1);
for(RG int i=0;i<(len<<1);++i)D[i]=1ll*D[i]*E[i]%MOD;
NTT(D,-1,len<<1);
for(RG int i=0;i<len;++i)b[i]=D[i];
for(RG int i=0;i<(len<<1);++i)D[i]=E[i]=0;
}
void FastPow(int *a,int *b,int K,int len)
{
int E[MAX];memset(E,0,sizeof(E));
Getln(a,E,len);
for(RG int i=0;i<len;++i)E[i]=1ll*K*E[i]%MOD;
Exp(E,b,len);
}
int X[MAX],Y[MAX];
int n,K;
int main()
{
freopen("polynomial.in","r",stdin);
freopen("polynomial.out","w",stdout);
n=read();K=read();
for(RG int i=0;i<n;++i)X[i]=read();
int N;for(N=1;N<=n;N<<=1);initinv(N);
Sqrt(X,Y,N);memset(X,0,sizeof(X));//for(int i=0;i<n;++i)printf("%d ",Y[i]);puts("");
Inv(Y,X,N);memset(Y,0,sizeof(Y));//for(int i=0;i<n;++i)printf("%d ",X[i]);puts("");
Jifen(X,Y,N);memset(X,0,sizeof(X));//for(int i=0;i<n;++i)printf("%d ",Y[i]);puts("");
Exp(Y,X,N);memset(Y,0,sizeof(Y));//for(int i=0;i<n;++i)printf("%d ",X[i]);puts("");
Inv(X,Y,N);memset(X,0,sizeof(X));Y[0]=(Y[0]+1)%MOD;//for(int i=0;i<n;++i)printf("%d ",Y[i]);puts("");
Getln(Y,X,N);memset(Y,0,sizeof(Y));X[0]=(X[0]+1)%MOD;//for(int i=0;i<n;++i)printf("%d ",X[i]);puts("");
FastPow(X,Y,K,N);memset(X,0,sizeof(X));
Dao(Y,X,n);for(RG int i=0;i<n;++i)printf("%d ",X[i]);puts("");
return 0;
}

【Cogs2187】帕秋莉的超级多项式(多项式运算)的更多相关文章

  1. COGS2187 [HZOI 2015] 帕秋莉的超级多项式

    什么都别说了,咱心态已经炸了... question 题目戳这里的说... 其实就是叫你求下面这个式子的导函数: noteskey 其实是道板子题呢~ 刚好给我们弄个多项式合集的说... 各种板子粘贴 ...

  2. 【HZOI2015】帕秋莉的超级多项式

    题面 题目分析 超级模板题: 多项式乘法 多项式求逆 多项式开根 多项式求导 多项式求积分 多项式求对数 多项式求自然对数为底的指数函数 多项式快速幂 代码实现 #include<iostrea ...

  3. COGS 2189 帕秋莉的超级多项式

    放模板啦! 以后打比赛的时候直接复制过来. 说句实话vector的效率真的不怎么样,但是似乎也还行,最主要是……写得比较爽. #include <cstdio> #include < ...

  4. P4910 帕秋莉的手环

    题目背景 帕秋莉是蕾米莉亚很早结识的朋友,现在住在红魔馆地下的大图书馆里.不仅擅长许多魔法,还每天都会开发出新的魔法.只是身体比较弱,因为哮喘,会在咏唱符卡时遇到麻烦. 她所用的属性魔法,主要是生命和 ...

  5. [Luogu] P4910 帕秋莉的手环

    题目背景 帕秋莉是蕾米莉亚很早结识的朋友,现在住在红魔馆地下的大图书馆里.不仅擅长许多魔法,还每天都会开发出新的魔法.只是身体比较弱,因为哮喘,会在咏唱符卡时遇到麻烦. 她所用的属性魔法,主要是生命和 ...

  6. cogs 998. [東方S2] 帕秋莉·诺蕾姬

    二次联通门 : cogs 998. [東方S2] 帕秋莉·诺蕾姬 交上去后发现自己没上榜 就想着加点黑科技 把循环展开一下 结果WA了.. 万恶的姆Q /* cogs 998. [東方S2] 帕秋莉· ...

  7. P4915 帕秋莉的魔导书(动态开点线段树)

    题目背景 帕秋莉有一个巨大的图书馆,里面有数以万计的书,其中大部分为魔导书. 题目描述 魔导书是一种需要钥匙才能看得懂的书,然而只有和书写者同等或更高熟练度的人才能看得见钥匙.因此,每本魔导书都有它自 ...

  8. 洛谷 P4910 帕秋莉的手环 矩阵乘法+快速幂详解

    矩阵快速幂解法: 这是一个类似斐波那契数列的矩乘快速幂,所以推荐大家先做一下下列题目:(会了,差不多就是多倍经验题了) 注:如果你不会矩阵乘法,可以了解一下P3390的题解 P1939 [模板]矩阵加 ...

  9. P4915 帕秋莉的魔导书

    题目链接 题意分析 当前等级为\(x\)的魔法书会对等级在\([x,inf]\)的所有人造成\(y\)的影响 所以除了求平均值之外 就是区间修改区间求和 需要使用动态开点 + 标记永久化 需要注意的是 ...

随机推荐

  1. DataGridView滚动慢​的解决方法

    当DataGridView达到一定大小的时候,拖动滚动条就会非常慢,出现让人难以忍受的闪动. 即便只有100行,每行30列. 解决方法是启用DataGridView的双缓冲. 1 2 3 4 5 6 ...

  2. My status

    I haven‘t any one who is strong relationship with me. My skill is normal. I'm not interesting in neg ...

  3. Jmeter接口测试(四)传递参数

    参数设置 Jmeter 支持通过 查询字符串参数(Query String Parameters) 或者 Request body 请求体来传递参数. 1.get请求是普通键值对 get请求一般通过p ...

  4. MySQL5.6.14从安装到启动全过程

    1.下载 地址:http://dev.mysql.com/downloads/mysql/ 这里选择的是Linux-Generic平台,下载了MySQL-5.6.14-1.linux_glibc2.5 ...

  5. selenium 标签页切换

    from selenium import webdriver import time browser=webdriver.Chrome() browser.maximize_window() # 窗口 ...

  6. 拉格朗日乘子法与KKT条件 && SVM中为什么要用对偶问题

    参考链接: 拉格朗日乘子法和KKT条件 SVM为什么要从原始问题变为对偶问题来求解 为什么要用对偶问题 写在SVM之前——凸优化与对偶问题 1. 拉格朗日乘子法与KKT条件 2. SVM 为什么要从原 ...

  7. Scrum立会报告+燃尽图(十月二十五日总第十六次)

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2284 项目地址:https://git.coding.net/zhang ...

  8. 《C》指针

    储存单元: 不同类型的数据所占用的字节不同,上面一个长方形格子表示4个字节 变量: 变量的值,就是存储的内容.变量的名就相当于地址的名.根据变量类型分配空间:通过变量名引用变量的值,程序经过编译将变量 ...

  9. 学习调用第三方的WebService服务

    互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的应用中显示,下面就以查询国内手机号码归属地为例进行说明. 首先安利一 ...

  10. 强化学习之QLearning

    注:以下第一段代码是 文章 提供的代码,但是简书的代码粘贴下来不换行,所以我在这里贴了一遍.其原理在原文中也说得很明白了. 算个旅行商问题 基本介绍 戳 代码解释与来源 代码整个计算过程使用的以下公式 ...