#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;
}
相关推荐
液晶屏LVDS接口:【图文详讲】
LVDS(Low Voltage Differential Signaling,即低电压差分信号)接口又称RS-644总线接口,是20世纪90年代才提出的一种数据传输和接口技术。LVDS接口是美国NS美国国家半导体公司为克服以TTL电平方式传输宽带高码率数据时功耗大,电磁干扰大等缺点而研制的一种数字视频信号传输方式
FFT/NTT(板子整理)
思路来源 https://www.cnblogs.com/candy99/p/6641972.html FTT板子整理 //fft #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using...
Windows10完美驱动Apple Studio Display:从雷电接口到亮度调节全攻略
本文详细介绍了如何在Windows10系统上完美驱动Apple Studio Display,涵盖雷电接口兼容性、亮度调节及色彩管理等关键问题。通过实测对比不同转接方案和显卡兼容性,推荐使用贝尔金VR线和NVIDIA GTX-1660显卡,并提供了BootCamp驱动安装和亮度调节的终极解决方案,帮助用户实现最佳显示效果。
板子:FFT/NTT
序言 这篇文章是自己看的,外面有这么多优秀的博客多好。 这是我在复赛前那个暑假的一个噩梦。。。最终我还是花了一天时间搞出来了,这说明我天赋一般,虽然即使说明了我天赋一般也没有什么用。。该干啥还是得干啥。其实天赋没啥用的,真正的是方法什么的比较重要,以及平时各种能力的积累,最终体现在天赋上,也就是说天赋是可以改变的,天赋和智商差距应该还是蛮大的。我在说啥。。。。。 感谢很多优秀的博主带来的优秀...
用LTspice仿真Buck电路输出电容:从参数计算到波形优化的全流程演示
本文详细介绍了使用LTspice仿真Buck电路输出电容的全流程,从理论计算到波形优化。通过解析关键参数如纹波电压、瞬态响应和ESR,结合工程计算方法和LTspice仿真技巧,帮助工程师优化Buck电路设计,解决输出纹波过大和瞬态响应不佳的问题。
嵌入式开发中Tab与空格混用的危害与统一规范实践
在软件工程中,代码格式一致性是保障可读性与团队协作效率的基础。从原理上看,制表符(Tab)与空格(Space)在存储与显示机制上存在本质差异:Tab是控制字符,其显示宽度取决于编辑器设置;空格则是固定宽度的字符。这种差异导致混用时会引发代码对齐错乱、版本控制冲突及跨平台兼容性问题,严重影响工程的可维护性。尤其在嵌入式开发领域,资源受限环境与高可靠性要求使得统一的编码规范更为关键。通过配置编辑器、集成clang-format等自动化工具,可以强制实现缩进风格的一致性,从而提升代码质量与团队协作效率。本文聚焦于
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 =...
手把手教你学Simulink--基于Simulink的高增益DC-DC变换器仿真建模
特点高电压增益:可以在不使用变压器的情况下实现较大的电压升压比。适用于低电压源:如太阳能电池板、燃料电池等提供的低压直流电源。效率问题:设计时需特别注意提高效率,减少能量损失。挑战电路复杂性:通常涉及多个电感和电容,以及复杂的开关模式。元件选择:合适的元件参数对于达到理想性能至关重要。控制策略:确保高效稳定运行的同时,适应负载变化。首先明确要模拟的任务内容。实现特定的电压增益比(例如从24V升至380V)。根据预期的输入输出电压确定合适的电路拓扑和元件值。
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
uniapp 如何封装实现任意页面都能使用的全局弹窗
项目内容场景全局监听消息提示难点uniapp 无法全局挂载组件解决方案动态创建 DOM + 动态 Vue 实例优势跨页面 / 不依赖页面组件树 / 灵活调用如果你使用的是小程序平台,DOM 操作可能受限,需要用或方式兼容处理。想支持多个弹窗堆叠?你可以扩展,加个弹窗队列管理器。
Weka学习笔记01:初探Weka世界
下载、安装和启动Weka、Weka数据格式
多项式板子
咱的多项式板子,从\(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...
openCv +3.4.0 车牌定位(C++版本)
#include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc.hpp> #include "opencv2/shape.hpp" using namespace ...
P5821 【L&K R-03】密码串匹配
【代码】P5821 【L&K R-03】密码串匹配。
VB摄像头监控
该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制
霍尼韦尔SoftMaster使用说明
霍尼韦尔SoftMaster使用说明
快速数论变换与多项式常用运算
NTT和多项式的常用基本操作。
IMSL CNL 7.0.0 (x86-64)Crack
IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件
多项式求逆
这个算法大概可以叫倍增吧 这里讲的很好 大概实现的时候就是一个递归 具体细节挺多 可以看我的代码:(这个是洛谷板子的) #include<cstdio> #include<cstring> #include<iostream> #include<cmath> #include<algorithm> #include<c...
怀旧版电脑GBC模拟器
再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。
【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\)处的泰勒展开。 前置知识:牛顿迭代 ...
多项式板子集
收集各种板子(方便背诵)
1万+



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



