bzoj4161: Shlw loves matrixI】的更多相关文章

Description 给定数列 {hn}前k项,其后每一项满足 hn = a1*h(n-1) + a2*h(n-2) + ... + ak*h(n-k) 其中 a1,a2...ak 为给定数列.请计算 h(n),并将结果对 1000000007 取模输出. Input 第 1 行包含两个整数 n,k 第 2 行包含 k 个整数 a1,a2...ak 第 3 行包含 k 个整数 h1,h2...hk Output 一行一个整数 hn mod 1000000007 常系数线性齐次递推可转为多项式幂…
[BZOJ4161]Shlw loves matrixI (常系数齐次线性递推) 题面 BZOJ 题解 \(k\)很小,可以直接暴力多项式乘法和取模. 然后就是常系数齐次线性递推那套理论了,戳这里 #include<iostream> #include<cstdio> #include<cstring> using namespace std; #define MOD 1000000007 #define MAX 5000 void add(int &x,int…
题目描述 给定数列 {hn}前k项,其后每一项满足 hn = a1h(n-1) + a2h(n-2) + ... + ak*h(n-k) 其中 a1,a2...ak 为给定数列.请计算 h(n),并将结果对 1000000007 取模输出. 解法 一个显然的思路就是矩阵乘法,但这样的话显然超时. 实际上,我们还可以继续对这个矩阵乘法进行优化. 首先,由于这是常系数齐次线性递推式,简单来说就是: \[f_i=\sum_{j=1}^k a_i*f_{i-j}\] 然后,我们需要引进特征多项式这个概念…
来自FallDream的博客,未经允许,请勿转载,谢谢. 给定数列 {hn}前k项,其后每一项满足 hn = a1*h(n-1) + a2*h(n-2) + ... + ak*h(n-k) 其中 a1,a2...ak 为给定数列.请计算 h(n),并将结果对 1000000007 取模输出. n<=10^9,k<=2000   很裸的特征多项式优化矩阵乘法,打个模版. #include<iostream> #include<cstdio> #define mod 100…
Description 给定数列 {hn}前k项,其后每一项满足 hn = a1h(n-1) + a2h(n-2) + ... + ak*h(n-k) 其中 a1,a2...ak 为给定数列.请计算 h(n),并将结果对 1000000007 取模输出. Solution 常系数线性齐次递推 首先 \(A\) 的特征多项式是 \(x^k-\sum_{i=1}^{k}a_i*x^{k-i}\) 根据Cayley-Hamilton定理可以得到 \(f(A)=0\) \(A^n=A^n\mod f(A…
矩阵乘法递推的新姿势. 叉姐论文里有讲到 利用特征多项式进行递推,然后可以做到k^2logn #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define ll long long #define F(i,j,k) for (int i=j;i<=k;++i) #define D(i,j,k) for (int i=j;i>=k;--i)…
并不会递推,不过板子挺好背的,只要是类似的递推都能用,但是注意c数组不能使负数 如果除了递推还有常数项的话,就用f[i]-f[i-1]的方式消掉常数项(然后多一个f[i-1]的项) #include<iostream> #include<cstdio> #include<cmath> #include<cstring> using namespace std; const int N=4005,mod=1000000007; int n,m,a[N],ans…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4161 还是不能理解矩阵…… 关于不用矩阵理解的方法:https://blog.csdn.net/joker_69/article/details/80869814 关于这道题:https://blog.csdn.net/sdfzyhx/article/details/63697273 现在只会 O(k2logn) 的做法. 很多题解的写法是快速幂到多项式的 n-(k-1) 次,用递推式暴力…
Time Limit: 30 Sec  Memory Limit: 128 MB Description 给定矩阵 M,请计算 M^n,并将其中每一个元素对 1000000007 取模输出. Input 第 1 行包含两个整数 n,k,其中 n 使用二进制表示,可能含有前导零; 余下 k 行描述了一个 k * k 的矩阵 M. Output 输出题目描述中要求的矩阵,格式同输入. Sample Input 010 3 5 9 5 5 4 0 8 8 8 Sample Output 110 121…
来自FallDream的博客,未经允许,请勿转载,谢谢 给定矩阵k*k的矩阵M,请计算 M^n,并将其中每一个元素对 1000000007 取模输出. k<=50 n<=2^10000 考虑求出矩阵的特征多项式,这点我们可以通过带入$\lambda=x0..xk$,求出矩阵的行列式,然后通过插值求出多项式. 然后搬出一个很厉害的定理:f(A)=0 其中f(x)是特征多项式,A是矩阵,所以我们可以把所求的$x^{n}$对f(x)取膜,从而让答案变成一个k-1次多项式.然后我们把原矩阵带进去就行了…