【模板】BM + CH(线性递推式的求解,常系数齐次线性递推)
这里所有的内容都将有关于一个线性递推:
$f_{n} = \sum\limits_{i = 1}^{k} a_{i} * f_{n - i}$,其中$f_{0}, f_{1}, ... , f_{k - 1}$是已知的。
BM是用于求解线性递推式的工具,传入一个序列,会返回一个合法的线性递推式,一个$vector$,其中第$i$项表示上式的$a_{i + 1}$。
CH用于快速求解常系数齐次线性递推的第$n$项,我们先会求出一个特征多项式$g$,$g$的第$k$项是$1$,其余项中第$k - i$项是$-a_{i}$。然后可以得到$c = x^{n} \; mod \; g$这么一个多项式,最后的答案就是$\sum\limits_{i = 0}^{k - 1} c_{i} * f_{i}$,这里用$c_{i}$表示$c$中第$i$项的系数。
其实这里只是想给出两者的板子,素质二连:
namespace BM{
#define pb push_back
#define SZ(x) ((int)x.size())
#define REP(i, a, b) for (int i = a; i < b; ++i)
LL Pow(LL x, LL b) {
LL re = ;
x %= MOD, assert(b >= );
for (; b; b >>= , x = x * x % MOD)
if (b & ) re = re * x % MOD;
return re;
}
VI Bm(VI x) {
VI ls, cur;
int pn = , lf, ld;
REP(i, , SZ(x)) {
LL t = -x[i] % MOD;
REP(j, , SZ(cur))
t = (t + x[i - j - ] * (LL)cur[j]) % MOD;
if (!t) continue;
if (cur.empty()) {
cur.resize(i + );
lf = i, ld = t;
continue;
}
LL k = -t * Pow(ld, MOD - ) % MOD;
VI c(i - lf - );
c.pb(-k);
REP(j, , SZ(ls)) c.pb(ls[j] * k % MOD);
if (c.size() < cur.size())
c.resize(cur.size());
REP(j, , SZ(cur))
c[j] = (c[j] + cur[j]) % MOD;
if (i - lf + SZ(ls) >= SZ(cur))
ls = cur, lf = i, ld = t;
cur = c;
}
VI &o = cur;
REP(i, , SZ(o))
o[i] = (o[i] % MOD + MOD) % MOD;
return o;
}
}
namespace CH {
#define SZ(x) ((int)x.size())
VI g;
int k;
inline void Ad(int &a, int b) {
if ((a += b) >= MOD) a -= MOD;
}
VI Mul(VI a, VI b) {
VI c;
assert(SZ(a) <= k && SZ(b) <= k);
c.resize(SZ(a) + SZ(b) - );
for (int i = ; i < SZ(a); ++i)
for (int j = ; j < SZ(b); ++j)
Ad(c[i + j], (LL)a[i] * b[j] % MOD);
for (int i = SZ(c) - ; i >= k; --i)
for (int j = ; j <= k; ++j)
Ad(c[i - k + j], MOD - (LL)c[i] * g[j] % MOD);
c.resize(k);
return c;
}
VI Solve(VI a, int n) {
k = SZ(a);
g.resize(k + , );
for (int i = ; i <= k; ++i)
g[k - i] = (MOD - a[i - ]) % MOD;
VI re(, ), x(, );
x[] = ;
for (; n; n >>= , x = Mul(x, x))
if (n & ) re = Mul(re, x);
return re;
}
}
【模板】BM + CH(线性递推式的求解,常系数齐次线性递推)的更多相关文章
- 【瞎讲】 Cayley-Hamilton 常系数齐次线性递推式第n项的快速计算 (m=1e5,n=1e18)
[背诵瞎讲] Cayley-Hamilton 常系数齐次线性递推式第n项的快速计算 (m=1e5,n=1e18) 看CSP看到一题"线性递推式",不会做,去问了问zsy怎么做,他并 ...
- 【Luogu4723】线性递推(常系数齐次线性递推)
[Luogu4723]线性递推(常系数齐次线性递推) 题面 洛谷 题解 板子题QwQ,注意多项式除法那里每个多项式的系数,调了一天. #include<iostream> #include ...
- 常系数齐次线性递推 & 拉格朗日插值
常系数齐次线性递推 具体记在笔记本上了,以后可能补照片,这里稍微写一下,主要贴代码. 概述 形式: \[ h_n = a_1 h_{n-1}+a_2h_{n-2}+...+a_kh_{n-k} \] ...
- 【BZOJ4161】Shlw loves matrixI (常系数齐次线性递推)
[BZOJ4161]Shlw loves matrixI (常系数齐次线性递推) 题面 BZOJ 题解 \(k\)很小,可以直接暴力多项式乘法和取模. 然后就是常系数齐次线性递推那套理论了,戳这里 # ...
- BZOJ4161 常系数齐次线性递推
问了数竞的毛毛搞了一番也没太明白,好在代码蛮好写先记下吧. #include<bits/stdc++.h> using namespace std; ,mod=1e9+; int n,k, ...
- 【BZOJ4944】[NOI2017]泳池(线性常系数齐次递推,动态规划)
[BZOJ4944][NOI2017]泳池(线性常系数齐次递推,动态规划) 首先恰好为\(k\)很不好算,变为至少或者至多计算然后考虑容斥. 如果是至少的话,我们依然很难处理最大面积这个东西.所以考虑 ...
- Re.常系数齐次递推
前言 嗯 我之前的不知道多少天看这个的时候到底在干什么呢 为什么那么.. 可能大佬们太强的缘故 最后仔细想想思路那么的emmm 不说了 要落泪了 唔唔唔 前置 多项式求逆 多项式除法/取模 常 ...
- 2019牛客暑期多校训练营(第五场)- B generator 1 (齐次线性递推+矩阵快速幂)
题目链接:https://ac.nowcoder.com/acm/contest/885/B 题意:已知齐次线性式xn=a*xn-1+b*xn-2,已知a,b,x0,x1,求xn,n很大,n<= ...
- 线性齐次递推式快速求第n项 学习笔记
定义 若数列 \(\{a_i\}\) 满足 \(a_n=\sum_{i=1}^kf_i \times a_{n-i}\) ,则该数列为 k 阶齐次线性递推数列 可以利用多项式的知识做到 \(O(k\l ...
随机推荐
- [SCOI2007]修车 BZOJ1070
很久之前写的题了,今天翻出来写一篇博客复习一下... 分析: 考虑,T <= 1000,并不能针对这一维处理,所以考虑将,每个人拆点,之后,拆完之后表示,这个人第n-j+1个修k这辆车,也就是, ...
- Oracle-归档日志详解(运行模式、分类)
一.Oracle日志分类 分三大类: Alert log files--警报日志,Trace files--跟踪日志(用户和进程)和 redo log 重做日志(记录数据库的更改 ...
- 浅谈Spring中的事务回滚
使用Spring管理事务过程中,碰到过一些坑,因此也稍微总结一下,方便后续查阅. 1.代码中事务控制的3种方式 编程式事务:就是直接在代码里手动开启事务,手动提交,手动回滚.优点就是可以灵活控 ...
- Educational Codeforces Round 41 (Rated for Div. 2)(A~D)
由于之前打过了这场比赛的E题,而后面两道题太难,所以就手速半个多小时A了前4题. 就当练手速吧,不过今天除了C题数组开小了以外都是1A A Tetris 题意的抽象解释可以在Luogu里看一下(话说现 ...
- POJ 2388&&2299
排序(水题)专题,毕竟如果只排序不进行任何操作都是极其简单的. 事实上,排序算法十分常用,在各类高级的算法中往往扮演着一个辅助的部分. 它看上去很普通,但实际的作用却很大.许多算法在失去排序后将会无法 ...
- 汇编 cdecl 函数调用约定,stdcall 函数调用约定
知识点: cdecl 函数调用约定 stdcall 函数调用约定 CALL堆栈平衡 配置属性--> c/c++ -->高级-->调用约定 一.cdecl调用约定 VC++ ...
- 【第十二课】FTP服务
目录 FTP服务 1.Linux下部署pure-ftpd 2.FTP的主动和被动模式 2.1.什么是主动FTP 2.2.什么是被动FTP 2.3.主动模式ftp与被动模式FTP优点和缺点: FTP服务 ...
- CS229笔记:线性回归
线性回归问题 首先做一些符号上的说明: \(x^{(i)}\):特征(feature) \(y^{(i)}\):目标变量(target variables) \(\mathcal{X}\):特征空间 ...
- 将WebService部署到 SharePoint 2010 gac 缓存中,并用Log4Net记录日志到数据库
最近做了一个sharePoint项目,需要实现的功能是,第三方网站访问我们sharePoint中的数据,通过Webservice方式实现文件的上传和下载. 于是代码工作完成了之后,本地调试没什么问题, ...
- 接口自动化学习--testNG
一个月一更的节奏~ testNg是一个开源的自动化测试框架..具体那些什么特点的就不想打了- -,贴张图(虽然也看不懂): 学习网站:https://www.yiibai.com/testng 一样是 ...