预备知识:FFT/NTT 多项式的逆 给定一个多项式 F(x)F(x)F(x),请求出一个多项式 G(x)G(x)G(x),满足 F(x)∗G(x)≡1(mod xn)F(x)*G(x) \equiv 1(mod\ x^n)F(x)∗G(x)≡1(mod xn). 系数对 998244353998244353998244353 取模,1≤n≤1051≤n≤10^51≤n≤105 首先将多项式的长度拓展至222的次幂,然后我们要求的是 G(x)∗F(x)≡1 (mod xn)G(x)*F(x) \…
前言 这里的全家桶目前只包括了\(ln,exp,sqrt\).还有一些类似于带余数模,快速幂之类用的比较少的有时间再更,\(NTT\)这种前置知识这里不多说. 还有一些基本的导数和微积分内容要了解,建议不懂的可以先去翻翻高二数学书. 之后多项式算法基本是一环扣一环的,所以前面的看不懂对于后面的理解会造成很大影响. 本博客涉及内容偏浅 Tips 这里是一些我个人的模板书写习惯 习惯相关的问题:默认将读入的\(n\)变为\(2\)的整数次幂形式,目前为止这样的做法都不会影响正确性 正确性相关的问题:…
题面 传送门 前置芝士 \(MTT\),多项式多点求值 题解 这题法老当初好像讲过--而且他还说这种题目如果模数已经给定可以直接分段打表艹过去 以下是题解 我们设 \[F(x)=\prod_{i=0}^{s-1}(x+i)\] 分治\(FFT\)即可求出 然后我们用多点求值求出\(x=1,s+1,2s+1,...,s^2-s+1\)时的答案 这样的话可以计算出\((s^2)!\),剩下没计算的部分直接暴力就是了 如果我们取\(s=\sqrt{n}\),复杂度大概就是\(O(s\log^2s)\)…
LINK:P5667 拉格朗日插值2 给出了n个连续的取值的自变量的点值 求 f(m+1),f(m+2),...f(m+n). 如果我们直接把f这个函数给插值出来就变成了了多项式多点求值 这个难度好像有点大. 不妨 直接考虑拉格朗日插值. 设此时要求f(k) 那么则有 \(\sum_{i=0}^nf(i)\frac{\Pi_{i\neq j}(k-j)}{\Pi_{i\neq j} (i-j)}\) 可以化简一下 \(f(k)=\sum_{i=0}^nf(i)\frac{ \Pi_{i\neq…
传送门 人傻常数大.jpg 因为求逆的时候没清零结果调了几个小时-- 前置芝士 多项式除法,多项式求逆 什么?你不会?左转你谷模板区,包教包会 题解 首先我们要知道一个结论\[f(x_0)\equiv f(x)\pmod{(x-x_0)}\] 其中\(x_0\)为一个常量,\(f(x_0)\)也为一个常量 证明如下,设\(f(x)=g(x)(x-x_0)+A\),也就是说\(A\)是\(f(x)\)对\((x-x_0)\)这个多项式取模之后的结果 因为\((x-x_0)\)的最高次项为\(1\)…
code: #include <bits/stdc++.h> #define ll long long #define ull unsigned long long #define setIO(s) freopen(s".in","r",stdin) // , freopen(s".out","w",stdout) using namespace std; char buf[100000],*p1,*p2; #de…
题目大意 考虑一个含有\(n\)个互异正整数的序列\(c_1,c_2,\ldots ,c_n\).如果一棵带点权的有根二叉树满足其所有顶点的权值都在集合\(\{c_1,c_2,\ldots ,c_n\}\)中,我们的小朋友就会将其称作神犇的.并且他认为,一棵带点权的树的权值,是其所有顶点权值的总和. 给出一个整数\(m\),你能对于任意的\(s(1\leq s\leq m)\)计算出权值为\(s\)的神犇二叉树的个数吗? 我们只需要知道答案关于\(998244353\)取模后的值. \(n,m\…
(首先要%miskcoo,这位dalao写的博客(这里)实在是太强啦qwq大部分多项式相关的知识都是从这位dalao博客里面学的,下面这篇东西是自己对其博客学习后的一些总结和想法,大部分是按照其博客里面的思路来分析的,并添加了一些自己的理解) 多项式求逆(元) 定义 对于一个多项式\(A(x)\),如果存在一个多项式\(B(x)\),满足\(B(x)\)的次数小于等于\(A(x)\)且\(A(x)B(x)\equiv 1(mod\ x^n)\),那么我们称\(B(x)\)为\(A(x)\)在模\…
首先,我们构造一个函数$G(x)$,若存在$k∈C$,则$[x^k]G(x)=1$. 不妨设$F(x)$为最终答案的生成函数,则$[x^n]F(x)$即为权值为$n$的神犇二叉树个数. 不难推导出,$[x^n]F(x)=\sum_{i=0}^{n}[x^i]G(x)\sum_{j=0}^{n-i}[x^j]F(j)\times [x^{n-j-i}]F(n-j-i)$. (这个式子的意思就是说,不妨设当前根节点的权值为i,然后枚举左右两个子树的权值) 这个式子显然可以通过动规的方式去推,从而得出…
FFT #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<cmath> #include<algorithm> #define maxn 1000005 using namespace std; inline int read() { ,f=;char ch=getchar(); ; +ch-'; return x*f; }…
生成函数又有奇妙的性质. $F(x)=C(x)*F(x)*F(x)+1$ 然后大力解方程,得到一个带根号的式子. 多项式开根有解只与常数项有关. 发现两个解只有一个是成立的. 然后多项式开根.求逆. 不太会算复杂度为什么是$n\log {n}$的. 开根号里套了一个求逆,不应该是两个$\log$? #include <map> #include <cmath> #include <queue> #include <cstdio> #include <c…
传送门 可以……这很多项式开根模板……而且也完全不知道大佬们怎么把这题的式子推出来的…… 首先,这题需要多项式开根和多项式求逆.多项式求逆看这里->这里,这里讲一讲多项式开根 多项式开方:已知多项式$B$,求多项式$A$满足$A^2\equiv B\pmod{x^n}$(和多项式求逆一样这里需要取模,否则$A$可能会有无数项) 假设我们已经求出$A'^2\equiv B\pmod{x^n}$,考虑如何计算出$A^2\equiv B\pmod{x^{2n}}$ 首先肯定存在$A^2\equiv B…
[BZOJ 3625] [Codeforces 438E] 小朋友的二叉树 (DP+生成函数+多项式开根+多项式求逆) 题面 一棵二叉树的所有点的点权都是给定的集合中的一个数. 让你求出1到m中所有权值为i的二叉树的个数. 两棵树不同当且仅当树的形态不一样或者是树的某个点的点权不一样 分析 设\(c(i)\)表示数值i是否在集合中.\(f(i)\)表示权值为i的二叉树的个数.那么 \[f(n)=\sum_{i=1}^n c(i) \sum_{j=0}^{n-i} f(j)f(n-i-j)\] 其…
https://www.lydsy.com/JudgeOnline/problem.php?id=3625 愉快地列式子.设\(F[i]\)表示权值为\(i\) 的子树的方案数,\(A[i]\)为\(i\)在不在集合中. \[ F[n]=\sum_{i=0}^n \sum_{j=0}^{n-i}F[i]\cdot F[j]\cdot A[n-i-j] \] 初始状态\(F[0]=1\). 我们把\(F,A\)看成多项式. \[ F(x)-1=F^2(x)\cdot A(x)\\ A(x)\cdo…
题面 题解 设多项式的第a项为权值和为a的二叉树个数,多项式的第a项表示是否为真,即 则,所以F是三个多项式的卷积,其中包括自己: ,1是F的常数项,即. 我们发现这是一个一元二次方程,可以求出,因为g的常数项为零,所以1-4g的常数项为1,的常数项也为1,的常数项就为零,就跑不了逆元,所以舍掉. 最终,跑一个多项式开根和一个多项式求逆就行. CODE 大常数TLE的代码, 自己优化吧(逃 #include<cstdio> #include<iostream> #include&l…
概述 多项式开跟是一个非常重要的知识点,许多多项式题目都要用到这一算法. 用快速数论变换,多项式求逆元和倍增法可以在$O(n log n)$的时间复杂度下求出一个$n$次多项式的开根. 前置技能 快速数论变换(NTT),多项式求逆元,二次剩余. 多项式的开根 给定一个多项式$A(x)$,其次数为$deg_A$,若存在一个多项式$B(x)$,使其满足$deg_B≤deg_A$,且$ B^2(x) \equiv A(x) (mod\ x^n)$,则$B(x)$即为$A(x)$在模$x^n$意义下的的…
CF Round250 E. The Child and Binary Tree 题意:n种权值集合C, 求点权值和为1...m的二叉树的个数, 形态不同的二叉树不同. 也就是说:不带标号,孩子有序 \(n,m \le 10^5\) sro vfk picks orz 和卡特兰数很像啊,\(f_i\)权值为i的方案数,递推式 \[ f[i] = \sum_{i\in C} \sum_{j=0}^{m-i}f[j]f[n-i-j] \] 用OGF表示他 \[ C(x)=\sum_{i\in C}x…
约定的记号 对于一个多项式\(A(x)\),若其最高次系数不为零的项是\(x^k\),则该多项式的次数为\(k\). 记为\(deg(A)=k\). 对于\(x\in(k,+ \infty)\),称\(x\)都为\(A(x)\)的次数界. 但一般地,我们都使用\(k+1\)作为\(A(x)\)的次数界. 多项式求逆 给定多项式\(A(x)\),求其在模\(x^n\)意义下的逆多项式\(B(x)\),使得 \[ \begin{equation} \label{eqn1} A(x)B(x)\equi…
题目大意 一行有\(n\)个球,现在将这些球分成\(k\) 组,每组可以有一个球或相邻两个球.一个球只能在至多一个组中(可以不在任何组中).求对于\(1\leq k\leq m\)的所有\(k\)分别有多少种分组方法. 答案对\(998244353\)取模. \(n\leq {10}^9,m<2^{19}\) 题解 因为\(k>n\)的项都是\(0\),所以我们钦定\(m\leq n\) 考虑DP. 记\(f_{i,j}\)为前\(i\)个球分为\(j\)组的方案数. \[ f_{i,j}=f…
设f(n)为权值为n的神犇二叉树个数.考虑如何递推求这个东西. 套路地枚举根节点的左右子树.则f(n)=Σf(i)f(n-i-cj),cj即根的权值.卷积的形式,cj也可以通过卷上一个多项式枚举.可以考虑生成函数. 设F(x)为f(n)的生成函数,G(x)为c(n)的生成函数,G(x)中含有xa项表示存在ci=a.于是可得F(x)=F2(x)G(x)+1.+1是因为枚举根的权值时没有考虑空树即根没有权值的情况. 可以解出F(x)={1±√[1-4G(x)]}/2G(x)=2/{1±√[1-4G(…
38:计算多项式的导函数 总时间限制:  1000ms 内存限制:  65536kB 描述 计算多项式的导函数是一件非常容易的任务.给定一个函数f(x),我们用f'(x)来表示其导函数.我们用x^n来表示x的n次幂.为了计算多项式的导函数,你必须知道三条规则: (1).(C)' = 0 如果C是常量 (2).(C*x^n)' = C*n*x^(n-1) 如果n >= 1且C是常量 (3).(f1(x)+f2(2))' = f1'(x)+f2'(x) 容易证明,多项式的导函数也是多项式. 现在,请…
题面 传送门 题解 首先你得会多项式开根->这里 其次你得会解形如 \[x^2\equiv a \pmod{p}\] 的方程 这里有两种方法,一个是\(bsgs\)(这里),还有一种是\(Cipolla\)(这里)(不过这个只能用来解二次剩余就是了) 代码里留着的是\(bsgs\),注释掉的是\(Cipolla\) 如果用\(Cipolla\)的话注意这里需要求的是较小的那个解 //minamoto #include<bits/stdc++.h> #include<tr1/unor…
C 语言 clock() 函数,例:计算多项式值 /** * clock(): 捕捉从程序开始运行到 clock() 被调用时所耗费的时间. * 这个时间单位是 clock tick, 即"时钟打点". * 常数 CLK_TCK: 机器时钟每秒所走的始终打点数. * In Macintosh or C99, CLK_TCK == CLOCKS_PER_SEC * http://www.cplusplus.com/reference/ctime/CLOCKS_PER_SEC/ */ 我把…
\(\mathcal{Description}\)   Link.   给定 \(n\) 次多项式 \(F(x)\),在模 \(998244353\) 意义下求 \[G(x)\equiv\left\{\left[1+\ln\left(2+F(x)-F(0)-\exp \int \frac{1}{\sqrt{F(t)}}\text dt\right)\right]^k\right\}'\pmod{x^n} \] 其中保证 \(F(0)\) 是模数的二次剩余,开根取模意义下较小常数项值.   \(n…
设代数式序列 $q_1(t), q_2(t), ..., q_{n-1}(t)$ ,由它们生成的多项式形式的表达式(不一定是多项式): $$p(t)=x_1+x_2q_1(t)+...x_nq_1(t)q_2(t)..q_{n-1}(t)=\sum\limits_{i=1}^n(x_i\prod\limits_{j=1}^{i-1}q_j(t))$$ 一般来讲,按照这个形式计算函数在 $t_0$ 点的取值的复杂度为:n-1次 $q_i(t)$ 求值,n-1次浮点数乘法(生成n个不同的乘积),n-…
本题要求实现一个函数,计算阶数为n,系数为a[0] ... a[n]的多项式f(x)=∑​i=0​n​​(a[i]×x​i​​) 在x点的值. 函数接口定义: double f( int n, double a[], double x ); 其中n是多项式的阶数,a[]中存储系数,x是给定点.函数须返回多项式f(x)的值. 裁判测试程序样例: #include <stdio.h> #define MAXN 10 double f( int n, double a[], double x );…
PTA 6-2 多项式求值 本题要求实现一个函数 本题要求实现一个函数,计算阶数为n,系数为a[0] ... a[n]的多项式f(x)=∑i=0n(a[i]×xi)" role="presentation">f(x)=∑ni=0(a[i]×xi)f(x)=∑i=0n(a[i]×xi)在x点的值. 函数接口定义 double f( int n, double a[], double x ); 其中n是多项式的阶数,a[]中存储系数,x是给定点.函数须返回多项式f(x)的值…
# 多项式求值(Horner规则) # 输入:A[a0,a1,a2...an],x的值 # 输出:给定的x下多项式的值p   # Horner迭代形式实现 1 # 在此修改初值 2 A = [2, 6, 15, -5, 34] 3 x = 2 4 # 主程序 5 p = A[-1] # 将索引指定为 -1 ,可让 Python 返回最后一个列表元素 6 for i in range(1,len(A)): 7 p = p*x + A[-1-i] 8 print('迭代法,该多项式的值为:',p)…
逆波兰表达式求值(栈和队列) Description 从键盘上输入一个逆波兰表达式,用伪码写出其求值程序.规定:逆波兰表达式的长度不超过一行,以@符作为输入结束,操作数之间用空格分隔,操作符只可能有+.-.*./四种运算.例如: 请输入一个以'@'字符结束的中缀算术表达式: 12+(3*(20/4)-8)*6@ 对应的后缀算术表达式为: 12 3 20 4 /*8 -6 *+@ 求值结果为:54 Input 12+(3*(20/4)-8)*6@ Output 54 中序表达式转换为逆波兰表达式:…
恒等有理式 总时限 10s 内存限制 256MB 出题人 fotile96 提交情况 4/43 描述 给定两个有理式f(X)与g(X),判断他们是否恒等(任意A,如果f(A)与g(A)均有定义,那么f(A)=g(A)). 有理式通过他们的中缀表达式给出,为了简化问题,我们对给出的中缀表达式进行如下的规范: 该表达式仅包含a-z0-9.+-*/^(),其中a-z用来表示未知数,0-9.用来表示数字常量,+-*/^是运算符,()用来改变运算顺序: 所有的运算符(+-*/^)都只作二元运算符使用,包括…