#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int input=1000000;
char InPut[1000005];
inline char GetChar()
{
if(input>=1000000)fread(InPut,1,1000000,stdin),input=0;
return InPut[input++];
}
#define GetChar() getchar()
template<typename Typename>
inline void Read(Typename &s)
{
register bool f=false;register char c=GetChar();
s=0.0;
while(c>'9'||c<'0'){if(c=='-')f=true;c=GetChar();}
while(!(c>'9'||c<'0')){s=s*10+c-48;c=GetChar();}
if(f)s=-s;
}
const long long Mod=998244353;
const int Maxn=3e5;
template<typename Typename>
inline void Swap(Typename &x,Typename &y)
{register Typename swap=x;x=y;y=swap;}
inline long long GetPow(long long base,long long index)
{
long long power=1;base%=Mod;
while(index!=0)
{
if(index&1)power=power*base%Mod;
index>>=1;base=base*base%Mod;
}
return power;
}
int Rev[Maxn];long long Gn[31],Gi[31];
inline void RevInit(int limit,int len)
{
for(register int i=1;i<limit;i++)
Rev[i]=(Rev[i>>1]>>1)|((i&1)<<(len-1));
}
inline void NTTInit()
{
for(register int i=1,g=1;g<=30;g++,i<<=1)
{
Gn[g]=GetPow(3,(Mod-1)/(i<<1));
Gi[g]=GetPow(Gn[g],Mod-2);
}
}
inline void NTT(long long *Arr,int limit,bool flag=true)
{
for(register int i=0;i<limit;i++)
if(i<Rev[i])Swap(Arr[i],Arr[Rev[i]]);
for(register int i=1,g=1;i<limit;i<<=1,g++)
{
register long long T=flag?Gn[g]:Gi[g];
for(register int j=0;j<limit;j+=(i<<1))
{
register long long W=1;
for(register int k=0;k<i;k++,W=(W*T)%Mod)
{
register long long x=Arr[j+k],y=W*Arr[j+k+i]%Mod;
Arr[j+k]=(x+y)%Mod;Arr[j+k+i]=(x-y+Mod)%Mod;
}
}
}
if(flag)return;
long long I=GetPow(limit,Mod-2);
for(register int i=0;i<limit;i++)Arr[i]=Arr[i]*I%Mod;
}
long long Copy[Maxn];
inline void GetInv(long long *Arr,long long *Inv,int n)
{
int now=1,limit=2,len=1;
Inv[0]=GetPow(Arr[0],Mod-2);
while(now<=n*2)
{
RevInit(limit,len);
for(register int i=0;i<now;i++)Copy[i]=Arr[i];
for(register int i=now;i<limit;i++)Copy[i]=0;
NTT(Copy,limit);NTT(Inv,limit);
for(register int i=0;i<limit;i++)
Inv[i]=((2ll-Inv[i]*Copy[i]%Mod)+Mod)%Mod*Inv[i]%Mod;
NTT(Inv,limit,false);
for(register int i=now;i<limit;i++)Inv[i]=0;
now<<=1;limit<<=1;len++;
}
}
inline void GetDev(long long *Arr,long long *Inv,int n)
{
for(register int i=1;i<n;i++)Inv[i-1]=i*Arr[i]%Mod;
Inv[n-1]=0;
}
inline void GetInvDev(long long *Arr,long long *Inv,int n)
{
for(register int i=1;i<n;i++)Inv[i]=Arr[i-1]*GetPow(i,Mod-2)%Mod;
Inv[0]=0;
}
long long TmpAi[Maxn],TmpBi[Maxn];
inline void GetLn(long long *Arr,long long *Inv,int n)
{
for(register int i=0;i<=(n<<1);i++)TmpAi[i]=0;
for(register int i=0;i<=(n<<1);i++)TmpBi[i]=0;
GetDev(Arr,TmpAi,n);
GetInv(Arr,TmpBi,n);
int limit=1,len=0;
while(limit<(n<<1))limit<<=1,len++;
RevInit(limit,len);
NTT(TmpAi,limit);NTT(TmpBi,limit);
for(register int i=0;i<limit;i++)TmpAi[i]=TmpAi[i]*TmpBi[i]%Mod;
NTT(TmpAi,limit,false);
GetInvDev(TmpAi,Inv,n);
}
long long TmpCi[Maxn],TmpDi[Maxn];
inline void GetExp(long long *Arr,long long *Inv,int n)
{
int len=1,limit=2,now=1;
Inv[0]=1;
while(now<=n*2)
{
RevInit(limit,len);
for(register int i=0;i<limit;i++)TmpCi[i]=0;
for(register int i=0;i<now;i++)TmpDi[i]=Arr[i];
for(register int i=now;i<limit;i++)TmpDi[i]=0;
GetLn(Inv,TmpCi,now);
NTT(Inv,limit);NTT(TmpCi,limit);NTT(TmpDi,limit);
for(register int i=0;i<limit;i++)
Inv[i]=(1ll-TmpCi[i]+TmpDi[i]+Mod)*Inv[i]%Mod;
NTT(Inv,limit,false);
for(register int i=now;i<limit;i++)Inv[i]=0;
now<<=1;limit<<=1;len++;
}
}
long long F[Maxn],G[Maxn],RG[Maxn],RF[Maxn],_G[Maxn],Q[Maxn],R[Maxn];
int n,m,limit,len;
int main()
{
NTTInit();
scanf("%d%d",&n,&m);
for(register int i=0;i<=n;i++)scanf("%lld",&F[i]),RF[n-i]=F[i];
for(register int i=0;i<=m;i++)scanf("%lld",&G[i]),RG[m-i]=G[i];
for(register int i=n-m+1;i<=m;i++)RG[i]=0;
for(register int i=n-m+1;i<=n;i++)RF[i]=RG[i]=0;
GetInv(RG,_G,n-m);
limit=1,len=0;
while(limit<=n+n-m)limit<<=1,len++;
RevInit(limit,len);
NTT(RF,limit);NTT(_G,limit);
for(register int i=0;i<limit;i++)RF[i]=RF[i]*_G[i]%Mod;
NTT(RF,limit,false);
for(register int i=0;i<=n-m;i++)Q[i]=RF[n-m-i],printf("%lld ",Q[i]);
for(register int i=2*n-m+1;i<limit;i++)RF[i]=0;
printf("\n");
limit=1,len=0;
while(limit<=n)limit<<=1,len++;
RevInit(limit,len);
NTT(G,limit);NTT(Q,limit);
for(register int i=0;i<limit;i++)G[i]=G[i]*Q[i]%Mod;
NTT(G,limit,false);
for(register int i=0;i<m;i++)R[i]=(F[i]-G[i]+Mod)%Mod,printf("%lld ",R[i]);
return 0;
}
相关推荐
PICO SCOPE 二次开发
基于C#开发一个简单的PICO示波器的上位机工作,与MCC600运动控制卡一起,实现数据自动采集
FFT/NTT(板子整理)
思路来源 https://www.cnblogs.com/candy99/p/6641972.html FTT板子整理 //fft #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using...
基于cat12搞定SBM的ROI的统计分析——vertex水平和ROI水平的双样本T检验
前言 一、Atlas皮层图谱介绍 二、SBM分析——主要以皮层四种常用指标中的厚度(thickness)和沟深(depth)为主
板子:FFT/NTT
序言 这篇文章是自己看的,外面有这么多优秀的博客多好。 这是我在复赛前那个暑假的一个噩梦。。。最终我还是花了一天时间搞出来了,这说明我天赋一般,虽然即使说明了我天赋一般也没有什么用。。该干啥还是得干啥。其实天赋没啥用的,真正的是方法什么的比较重要,以及平时各种能力的积累,最终体现在天赋上,也就是说天赋是可以改变的,天赋和智商差距应该还是蛮大的。我在说啥。。。。。 感谢很多优秀的博主带来的优秀...
Silvaco TCAD实战 | SiC MOSFET工艺仿真与关键参数DOE分析
本文详细介绍了使用Silvaco TCAD进行SiC MOSFET工艺仿真与关键参数DOE分析的实战方法。通过外延生长建模、离子注入工艺调试等步骤,结合DOE分析优化器件性能,帮助工程师在设计阶段预判电学特性,提升产品可靠性。文章还分享了网格划分、界面态建模等实用技巧,助力实现从仿真到产品的闭环验证。
关于【中孚计算机终端保密检查系统】的卸载
卸载中孚计算机终端保密检查系统
NTT板子 -- from ACdreamer -- test by HDU6061
NTT板子 #include <iostream> #include <string.h> #include <stdio.h> using namespace std; const int MAXN = 400040; typedef long long LL; const int N = 100005; const int P =...
DDD系列 - 第12讲 如何在DDD中实现Query服务(轻量化CQRS)
轻量化CQRS、整合Repository和DAO的优势。
NTT板子
话说NTT真不是一般的快啊。。。。 还有到底用那个模数啊。。。。 UOJ模数会不会出问题啊。。。 算了,就用UOJ模数吧。。。 代码: #include #include #include #include #include #include #define ll long long #define max(a,b) a>b?a:b #define min(a,b) a using
分布式训练中All-Reduce、All-Gather、Reduce-Scatter原理
Reduce-Scatter = 先对所有进程的数据做 Reduce(如 sum / mean),再把结果“切分”分发给各进程。(是 Reduce + Scatter 的融合操作。
Python爬虫:抓取外卖平台餐厅菜单、价格与评价数据
美团外卖:国内领先的外卖平台之一,提供餐饮外卖、超市配送等服务。饿了么:另一大主流外卖平台,覆盖广泛的餐饮品类。等:国际性的外卖平台。在本文中,我们将以美团外卖为例,展示如何抓取餐厅的菜单、价格和评价等数据。我们会使用Python的爬虫库,如Scrapy和Selenium,来解决抓取任务。本文详细介绍了如何使用Python爬虫抓取外卖平台上的餐厅菜单、价格、评价等信息。我们展示了如何使用Scrapy和Selenium抓取静态与动态网页数据,如何清洗和存储数据,并讨论了如何应对外卖平台的反爬虫机制。
多项式板子
咱的多项式板子,从\(NTT\)到反三角函数应有尽有 常数应该比较小,你谷上的板子提交里一般能跑到第一页的 似乎我就没见过几个人现在还在用数组写多项式的了…… //minamoto #include<bits/stdc++.h> #define R register #define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i) #defin...
labelImg使用教程
Anaconda环境 安装 Anaconda 之后,在开始菜单下找到 Anaconda 文件夹 找到 Anaconda Prompt 点击运行 安装 labelImg pip install labelImg #直接命令行输入 启动 labelImg labelImg #直接命令行输入名称即可 labelImg界面 开始标注 快捷键:W(创建方框),A(上一张),D(下一张) XML文件示例 <annotation> <folder>夜读</folder>
P5821 【L&K R-03】密码串匹配
【代码】P5821 【L&K R-03】密码串匹配。
怀旧版电脑GBC模拟器
再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。
IMSL CNL 7.0.0 (x86-64)Crack
IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件
快速数论变换与多项式常用运算
NTT和多项式的常用基本操作。
ET2012新版免狗免安装绿色软件
ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,
多项式求逆
这个算法大概可以叫倍增吧 这里讲的很好 大概实现的时候就是一个递归 具体细节挺多 可以看我的代码:(这个是洛谷板子的) #include<cstdio> #include<cstring> #include<iostream> #include<cmath> #include<algorithm> #include<c...
华为的C语言编程规范.pdf
华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。
【NTT】【多项式】洛谷P5158 多项式快速插值(log^2)
快速插值O(Nlog2N)O(N log^2 N)O(Nlog2N)板子。 话说这代码居然比O(Nlog3N)O(N log^3 N)O(Nlog3N)更短更好写。。。 实测本题O(Nlog3N)O(N log^3 N)O(Nlog3N)的时间是O(Nlog2N)O(N log^2 N)O(Nlog2N)的5~6倍左右。 #include<cstdio> #include<cst...
巨型多项式板子集合...
300+行完成几乎所有多项式操作… (不得不说指针真是个好东西) #include<bits/stdc++.h> #define Set(a,b) memset(a,b,sizeof(a)) #define Clear(a,_begin_,_end_) for(int i=_begin_;i<_end_;++i) a[i]=0 #define Input_Array(a,_beg...
51Nod 1028 大数乘法 V2
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1028 分析: FFT/NTT板子题... 代码: NTT板子: #include<algorithm> #include<iostream> #include<cstring> #include<cs...
多项式求逆板子
建议搭配NTT板子食用~ 并且注意,函数结束后有可能需要清空[toap,2*toap)的值,不清空可能会爆 void GetInv(int a[],int ni[],int toap) { int i,now; ni[0]=ksm(a[0],MOD-2); for(now=2;now<=toap;now<<=1){ fill(...
2019.03.18【洛谷P5245】【模板】多项式快速幂(NTT)(多项式Ln)(多项式Exp)
传送门 解析: 直接做的话还是可以mod  p\mod pmodp后做快速幂,那样的话就有两个log\loglog 实际上由于a0=1a_0=1a0=1,可以考虑两边取对数: lnB(x)=klnA(x)\ln B(x)=k\ln A(x)lnB(x)=klnA(x) 取对数,一乘,再exp回去就做完了。 代码: #include...
多项式总结&多项式板子
多项式总结&多项式板子 三角/反三角是不可能放的(也不可能真香的 多项式乘法(DFT,FFT,NTT,MTT) 背板子 前置知识:泰勒展开 如果\(f(x)\)在\(x_0\)处存在\(n\)阶导,那么 \[f(x)=\sum_{i=0}^{\infty}\frac{f^i(x_0)}{i!}(x-x_0)^i\] 称作\(f(x)\)在\(x_0\)处的泰勒展开。 前置知识:牛顿迭代 ...
多项式板子集
收集各种板子(方便背诵)
1147



被折叠的 条评论
为什么被折叠?



