P4512 【模板】多项式除法
P4512 【模板】多项式除法题目描述给定一个n nn次多项式F ( x ) F(x)F(x)和一个m mm次多项式G ( x ) G(x)G(x)请求出多项式Q ( x ) Q(x)Q(x),R ( x ) R(x)R(x)满足以下条件Q ( x ) Q(x)Q(x)次数为n − m n-mn−mR ( x ) R(x)R(x)次数小于m mmF ( x ) Q ( x ) ∗ G ( x ) R ( x ) F(x) Q(x) * G(x) R(x)F(x)Q(x)∗G(x)R(x)所有的运算在模998244353 998244353998244353意义下进行。输入格式第一行两个整数n nnm mm意义如上。第二行n 1 n1n1个整数从低到高表示F ( x ) F(x)F(x)的各个系数。第三行m 1 m1m1个整数从低到高表示G ( x ) G(x)G(x)的各个系数。输出格式第一行n − m 1 n-m1n−m1个整数从低到高表示Q ( x ) Q(x)Q(x)的各个系数。第二行m mm个整数从低到高表示R ( x ) R(x)R(x)的各个系数。如果R ( x ) R(x)R(x)不足m − 1 m-1m−1次多余的项系数补0 00。输入输出样例 #1输入 #15 1 1 9 2 6 0 8 1 7输出 #1237340659 335104102 649004347 448191342 855638018 760903695说明/提示对于所有数据1 ≤ m n ≤ 10 5 1 \le m n \le 10^51≤mn≤105给出的系数均属于[ 0 , 998244353 ) ∩ Z [0, 998244353) \cap \mathbb{Z}[0,998244353)∩Z。思路直接NTT即可。代码#includebits/stdc.husingnamespacestd;longlongn,m,nn1,nn21,uv[4000006][2];constlonglongmod998244353;longlonga[4000006],b[4000006],c[4000006],d[4000006],f[4000006],g[2000006],g2[2000006];longlongpow2(longlonga1,longlongb1){longlongc11;while(b1!0){if(b1%21){c1c1*a1%mod;}a1a1*a1%mod;b1/2;}returnc1;}voidntt(longlongn1,longlong*a1,longlongb1){if(n11){return;}longlongax[n1/2],ay[n1/2];for(inti0;in1-1;i2){ax[i/2]a1[i];ay[i/2]a1[i1];}ntt(n1/2,ax,b1);ntt(n1/2,ay,b1);longlongww,w1;if(b11){if(uv[n1][0]0){wwpow2(3ll,(mod-1)*pow2(n1,mod-2)%mod);uv[n1][0]pow2(3ll,(mod-1)*pow2(n1,mod-2)%mod);}else{wwuv[n1][0];}}else{if(uv[n1][1]0){wwpow2(pow2(3ll,(mod-1)*pow2(n1,mod-2)%mod),mod-2);uv[n1][1]pow2(pow2(3ll,(mod-1)*pow2(n1,mod-2)%mod),mod-2);}else{wwuv[n1][1];}}for(inti0;in1/2-1;i,ww*ww%mod){a1[i](ax[i]w*ay[i])%mod;a1[in1/2](ax[i]-w*ay[i]%modmod)%mod;}return;}intmain(){cinnm;for(inti0;in;i){cinf[i];}for(inti0;im;i){cing[i];g2[i]g[i];}for(inti0;in/2;i){swap(f[i],f[n-i]);}for(inti0;im/2;i){swap(g[i],g[m-i]);}for(intin-m1;im;i){g[i]0;}a[0]pow2(g[0],mod-2);while(nnn-m1n-m1){nn*2;nn2pow2(nn*2ll%mod,mod-2);for(inti0;inn-1;i){c[i]b[i]0;}for(inti0;inn/2-1;i){c[i]a[i];}ntt(nn*2,a,1);for(inti0;inn-1;i){b[i]g[i];}ntt(nn*2,b,1);for(inti0;inn*2-1;i){a[i]a[i]*b[i]%mod;}ntt(nn*2,a,-1);for(inti0;inn*2-1;i){a[i]a[i]*nn2%mod;a[i]mod-a[i];}a[0](a[0]2ll)%mod;ntt(nn*2,a,1);ntt(nn*2,c,1);for(inti0;inn*2-1;i){a[i]a[i]*c[i]%mod;}ntt(nn*2,a,-1);for(inti0;inn*2-1;i){a[i]a[i]*nn2%mod;if(inn){a[i]0;}}}nn1;while(nnnn){nn*2;}nn2pow2(nn,mod-2);for(intin-m1;inn-1;i){a[i]0;}ntt(nn,a,1);for(inti0;inn-1;i){b[i]f[i];}ntt(nn,b,1);for(inti0;inn;i){a[i]a[i]*b[i]%mod;}ntt(nn,a,-1);for(inti0;inn-1;i){a[i]a[i]*nn2%mod;if(in-m1){a[i]0;}}for(inti0;i(n-m)/2;i){swap(a[i],a[n-m-i]);//couta[i] ;}for(inti0;in-m;i){//swap(a[i],a[n-m-i]);couta[i] ;}coutendl;for(inti0;im;i){g[i]g2[i];}for(inti0;in/2;i){swap(f[i],f[n-i]);}nn1;while(nnnn){nn*2;}nn2pow2(nn,mod-2);for(inti0;inn-1;i){b[i]c[i]0;}for(inti0;in-m;i){c[i]a[i];}ntt(nn,c,1);for(inti0;im;i){b[i]g[i];}ntt(nn,b,1);for(inti0;inn;i){c[i]c[i]*b[i]%mod;}ntt(nn,c,-1);for(inti0;inn-1;i){c[i]c[i]*nn2%mod;}for(inti0;in;i){c[i](f[i]-c[i]mod)%mod;}for(inti0;im-1;i){coutc[i] ;}coutendl;return0;}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2424714.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!