Luogu4512 【模板】多项式除法(多项式求逆+NTT)
http://blog.miskcoo.com/2015/05/polynomial-division 好神啊!
通过翻转多项式消除余数的影响,主要原理是商只与次数不小于m的项有关。
- #include<iostream>
- #include<cstdio>
- #include<cmath>
- #include<cstdlib>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- int read()
- {
- int x=,f=;char c=getchar();
- while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
- while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
- return x*f;
- }
- #define N 550000
- #define P 998244353
- int n,m,t,a[N],b[N],r[N],c[N],d[N],e[N],inv3;
- int ksm(int a,int k)
- {
- if (k==) return ;
- int tmp=ksm(a,k>>);
- if (k&) return 1ll*tmp*tmp%P*a%P;
- else return 1ll*tmp*tmp%P;
- }
- int inv(int a){return ksm(a,P-);}
- void DFT(int n,int *a,int p)
- {
- for (int i=;i<n;i++) if (i<r[i]) swap(a[i],a[r[i]]);
- for (int i=;i<=n;i<<=)
- {
- int wn=ksm(p,(P-)/i);
- for (int j=;j<n;j+=i)
- {
- int w=;
- for (int k=j;k<j+(i>>);k++,w=1ll*w*wn%P)
- {
- int x=a[k],y=1ll*w*a[k+(i>>)]%P;
- a[k]=(x+y)%P,a[k+(i>>)]=(x-y+P)%P;
- }
- }
- }
- }
- void mul(int n,int *a,int *b)
- {
- DFT(n,a,),DFT(n,b,);
- for (int i=;i<n;i++) a[i]=1ll*a[i]*b[i]%P;
- DFT(n,a,inv3);
- int invn=inv(n);
- for (int i=;i<n;i++) a[i]=1ll*a[i]*invn%P;
- }
- int main()
- {
- #ifndef ONLINE_JUDGE
- freopen("division.in","r",stdin);
- freopen("division.out","w",stdout);
- const char LL[]="%I64d";
- #else
- const char LL[]="%lld";
- #endif
- n=read(),m=read();
- for (int i=;i<=n;i++) a[i]=read();
- for (int i=;i<=m;i++) b[i]=read();
- reverse(b,b+m+);
- t=;c[]=inv(b[]);
- inv3=inv();
- while (t<n-m+)
- {
- t<<=;
- for (int i=;i<t;i++) d[i]=b[i];
- t<<=;
- for (int i=;i<t;i++) r[i]=(r[i>>]>>)|(i&)*(t>>);
- memcpy(e,c,sizeof(e));
- mul(t,e,d);
- for (int i=;i<t;i++) e[i]=(P-e[i])%P;
- e[]=(e[]+)%P;
- for (int i=(t>>);i<t;i++) e[i]=;
- mul(t,c,e);
- for (int i=(t>>);i<t;i++) c[i]=;
- t>>=;
- }
- memcpy(d,a,sizeof(a));
- reverse(d,d+n+);
- for (int i=n-m+;i<=n;i++) c[i]=d[i]=;
- t=;while (t<=(n-m+<<)) t<<=;
- for (int i=;i<t;i++) r[i]=(r[i>>]>>)|(i&)*(t>>);
- mul(t,c,d);
- for (int i=n-m+;i<t;i++) c[i]=;
- reverse(c,c+n-m+);
- for (int i=;i<=n-m;i++) printf("%d ",c[i]);cout<<endl;
- reverse(b,b+m+);
- t=;while (t<=n) t<<=;
- for (int i=;i<t;i++) r[i]=(r[i>>]>>)|(i&)*(t>>);
- mul(t,c,b);
- for (int i=;i<m;i++) printf("%d ",(a[i]-c[i]+P)%P);
- return ;
- }
Luogu4512 【模板】多项式除法(多项式求逆+NTT)的更多相关文章
- [BZOJ3625][Codeforces Round #250]小朋友和二叉树 多项式开根+求逆
https://www.lydsy.com/JudgeOnline/problem.php?id=3625 愉快地列式子.设\(F[i]\)表示权值为\(i\) 的子树的方案数,\(A[i]\)为\( ...
- luoguP4238 【模板】多项式求逆 NTT
Code: #include <bits/stdc++.h> #define N 1000010 #define mod 998244353 #define setIO(s) freope ...
- 【learning】多项式相关(求逆、开根、除法、取模)
(首先要%miskcoo,这位dalao写的博客(这里)实在是太强啦qwq大部分多项式相关的知识都是从这位dalao博客里面学的,下面这篇东西是自己对其博客学习后的一些总结和想法,大部分是按照其博客里 ...
- 【BZOJ 4555】[Tjoi2016&Heoi2016]求和 多项式求逆/NTT+第二类斯特林数
出处0.0用到第二类斯特林数的性质,做法好像很多,我打的是直接ntt,由第二类斯特林数的容斥公式可以推出,我们可以对于每一个i,来一次ntt求出他与所有j组成的第二类斯特林数的值,这个时候我们是O(n ...
- bzoj 3625: [Codeforces Round #250]小朋友和二叉树【NTT+多项式开根求逆】
参考:https://www.cnblogs.com/2016gdgzoi509/p/8999460.html 列出生成函数方程,g(x)是价值x的个数 \[ f(x)=g(x)*f^2(x)+1 \ ...
- P4238 【模板】多项式求逆 ntt
题意:求多项式的逆 题解:多项式最高次项叫度deg,假设我们对于多项式\(A(x)*B(x)\equiv 1\),已知A,求B 假设度为n-1,\(A(x)*B(x)\equiv 1(mod x^{\ ...
- 洛谷.4238.[模板]多项式求逆(NTT)
题目链接 设多项式\(f(x)\)在模\(x^n\)下的逆元为\(g(x)\) \[f(x)g(x)\equiv 1\ (mod\ x^n)\] \[f(x)g(x)-1\equiv 0\ (mod\ ...
- JZYZOJ 2043 多项式除法和取余 NTT 多项式
http://172.20.6.3/Problem_Show.asp?id=2043 最开始用了FFT,交上去全tle和wa了(tle的比较多),测了一组数据发现求逆元的过程爆double了(毕竟系数 ...
- [洛谷P4721]【模板】分治 FFT_求逆
题目大意:给定长度为$n-1$的数组$g_{[1,n)}$,求$f_{[0,n)}$,要求: $$f_i=\sum_{j=1}^if_{i-j}g_j\\f_0=1$$ 题解:分治$FFT$博客,发现 ...
随机推荐
- Kubernetes 1.10.4 镜像 版本
1. gcr.io/google-containers/hyperkube:1.10.4 gcr.io/google_containers/pause-amd64:3.0 gcr.io/google_ ...
- [04] Bean的实例化和多个配置文件
之前我们已经提到过,Spring的核心能力之一就是IOC机制,从上章的示例中我们也可以看到,Spring中的ApplicationContext充当了一个实例化对象的容器的角色,并管理着它们的生命周期 ...
- TCP/IP与OSI模型
- Hive 创建表
创建表的三种方式: 方式一:新建表结构 CREATE TABLE emp( empno int, ename string ) ROW FORMAT DELIMITED FIELDS TERMINAT ...
- 解决微软surface pro在某些情况下wifi转输速度过慢的问题 - z
我是新款i7 surface.昨天到的货,狗东. 在公司使用的时候网络很正常,但回到家里之后就特别卡.5G频段也特别卡,基本处于无法观看视频的地步.台式电脑(我台式用的无线网卡)和手机都没问题. 于是 ...
- Java HTML to PDF 支持SVG
尝试一 (现用框架的基础上改动,影响最小化) 最早使用的框架 Xhtmlrenderer,需要把HTML转换成XHTML,引入第二个框架Tidy,Tidy与2010年停止更新,github上的项目也停 ...
- 软件工程M1/M2总结及阅读作业总结
一.软件工程M1/M2总结 写下这篇总结的时候,我们的软件项目尚未完工.虽然尝试申请了延期答辩,但最终未能成功.这意味着,我们的项目能否正常发布已经处于了一个微妙的状态.可能可以,也可能不可以.只能尽 ...
- BugPhobia发布篇章:Beta版本学霸在线系统正式发布
0x00:测试报告版本管理 版本号 具体细节 修订时间 V 1.0 整理第一轮迭代用户管理和登陆注册的功能性验证测试,预计将继续网页对浏览器版本的兼容性测试 2015/11/12 V1.0.1 整理第 ...
- Linux内核分析 读书笔记 (第十八章)
第十八章 调试 18.1 准备开始 1. 需要的只是: 一个bug 一个藏匿bug的内核版本 相关内核代码的知识和运气 2. 在跟踪bug的时候,掌握的信息越多越好. 18.2 内核中的bug 1. ...
- sublime text3修改默认配置文件是失败的解决方法
如果你修改sublime text3的默认配置文件Preferences.sublime-settings失败,现实的错误信息如下图: 其实根据提示信息就好找问题出在哪里了:权限 要想成功的修改默认配 ...