bzoj 4161: Shlw loves matrixI
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)\)
以上并不知道怎么得来的....QwQ
于是我们可以快速幂求出 \(x^1,x^2.....x^n\) 的系数 \(c_i\),然后代入 \(A\)
最后答案就是 \(A^n*h_k=\sum_{i=0}^{k-1}c_i*A^i*h_k=\sum_{i=0}^{k-1}c_i*h_{i+k}\)
关于多项式取模法则:
如:\(5x^5+3x^4+x^3+x^2+6x+1 \mod (x^3+x^2+x+1)\)
我们先把 \((x^3+x^2+x+1)\) 乘以 \(x^2\),把被除的多项式中的 \(5x^5\) 消掉(做减法)
然后以此把次高位消掉,直到消到 \(x^3\) 为止,此题中可以 \(O(k^2)\) 暴力多项式取模
#include<bits/stdc++.h>
using namespace std;
template<class T>void gi(T &x){
int f;char c;
for(f=1,c=getchar();c<'0'||c>'9';c=getchar())if(c=='-')f=-1;
for(x=0;c<='9'&&c>='0';c=getchar())x=x*10+(c&15);x*=f;
}
const int N=4010,mod=1e9+7;
int n,k,a[N],h[N],mo[N],ans[N],b[N],t[N];
inline void mul(int *a,int *b,int *c){
for(int i=2*k-2;i>=0;i--)t[i]=0;
for(int i=0;i<k;i++)
if(a[i])
for(int j=0;j<k;j++)
t[i+j]=(t[i+j]+1ll*a[i]*b[j])%mod;
for(int i=2*k-2;i>=k;i--)//多项式取模,依次消掉最高位
if(t[i])
for(int j=k-1;j>=0;j--)
t[i-k+j]=(t[i-k+j]-1ll*mo[j]*t[i]+mod)%mod;
for(int i=0;i<k;i++)c[i]=t[i];
}
int main(){
freopen("pp.in","r",stdin);
freopen("pp.out","w",stdout);
cin>>n>>k;
for(int i=1;i<=k;i++)gi(a[i]),mo[k-i]=mod-a[i];
for(int i=1;i<=k;i++)gi(h[i]);
mo[k]=1;b[1]=1;ans[0]=1;
for(n-=k-1;n;n>>=1){
if(n&1)mul(ans,b,ans);
mul(b,b,b);
}
for(int i=k+1;i<=2*k-1;i++)
for(int j=1;j<=k;j++)h[i]=(h[i]+1ll*h[i-j]*a[j])%mod;
int ret=0;
for(int i=0;i<k;i++)ret=(ret+1ll*h[i+k]*ans[i])%mod;
if(ret<0)ret+=mod;
cout<<ret<<endl;
return 0;
}
bzoj 4161: Shlw loves matrixI的更多相关文章
- bzoj 4161 Shlw loves matrixI——常系数线性齐次递推
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4161 还是不能理解矩阵…… 关于不用矩阵理解的方法:https://blog.csdn.ne ...
- BZOJ 4161 Shlw loves matrixI ——特征多项式
矩阵乘法递推的新姿势. 叉姐论文里有讲到 利用特征多项式进行递推,然后可以做到k^2logn #include <cstdio> #include <cstring> #inc ...
- bzoj 4161 Shlw loves matrixI【常系数线性齐次递推】
并不会递推,不过板子挺好背的,只要是类似的递推都能用,但是注意c数组不能使负数 如果除了递推还有常数项的话,就用f[i]-f[i-1]的方式消掉常数项(然后多一个f[i-1]的项) #include& ...
- 【BZOJ4161】Shlw loves matrixI (常系数齐次线性递推)
[BZOJ4161]Shlw loves matrixI (常系数齐次线性递推) 题面 BZOJ 题解 \(k\)很小,可以直接暴力多项式乘法和取模. 然后就是常系数齐次线性递推那套理论了,戳这里 # ...
- [BZOJ]4162: shlw loves matrix II
Time Limit: 30 Sec Memory Limit: 128 MB Description 给定矩阵 M,请计算 M^n,并将其中每一个元素对 1000000007 取模输出. Inpu ...
- bzoj4161: Shlw loves matrixI
Description 给定数列 {hn}前k项,其后每一项满足 hn = a1*h(n-1) + a2*h(n-2) + ... + ak*h(n-k) 其中 a1,a2...ak 为给定数列.请计 ...
- 【BZOJ4161】Shlw loves matrixI
题目描述 给定数列 {hn}前k项,其后每一项满足 hn = a1h(n-1) + a2h(n-2) + ... + ak*h(n-k) 其中 a1,a2...ak 为给定数列.请计算 h(n),并将 ...
- BZOJ 3563 DZY Loves Chinese
Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以修能. 遂降临于OI界,欲以神力而凌♂辱众生. 今Dzy有一魞歄图,其上 ...
- ●BZOJ 3309 DZY Loves Math
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3309 题解: 莫比乌斯反演,线筛 化一化式子: f(x)表示x的质因子分解中的最大幂指数 $ ...
随机推荐
- Spring Boot专题背景简介
鄙人13年毕业,不曾在圈子里写过总结,因此文笔颇不自信. 但人生永远没有太晚的开始,现在开始做些笔记,借此巩固下学到的新知识. 一些题外话: 前段时间,做个小项目,由于某些原因,使用Java来写(之前 ...
- [网络流24题] 最长K可重区间集问题
题目链接:戳我 当时刷24题的时候偷了懒,没有写完,结果落下这道题没有写qwq结果今天考试T3中就有一部分要用到这个思想,蒟蒻我硬是没有想到网络流呜呜呜 最大费用流. 就是我们考虑将问题转化一下,转化 ...
- 用Visual Studio 2015 编译张帆的第一个WDM驱动,并且成功安装到Windows 10里面!!!
开发工具:Visual Studio 2015 企业版 目 标 机:Windows 10 X86 前提:我们已经成功安装了Visual Studio 2015以及WDK,而且更重要一点是一定要SDK版 ...
- 9w5:第九周程序填空题1
描述 下面的程序输出结果是: 1 2 6 7 8 9 请填空: #include <iostream> #include <iterator> #include <set ...
- SPOJ QTREE2 Query on a tree II
传送门 倍增水题…… 本来还想用LCT做的……然后发现根本不需要 //minamoto #include<bits/stdc++.h> using namespace std; #defi ...
- 20 行代码极速为 App 加上聊天功能
现在很多 App 都需要集成 IM 功能,今天就为大家分享一下集成 IM 基本功能的步骤.本文内容以 JMessage 为例.极光 IM ( JMessage ) = 极光推送 ( JPush ) + ...
- 数学 CF1068B LCM
CF1068B LCM 给定一个正整数\(b (1\leq b \leq 10^{10})\). 把一个正整数a从1枚举到\(10^{18}\),求有多少种不同的\(\large \frac{[a,b ...
- Linux sort和uniq命令的应用
sort: 选项: -b 忽略每行前面开始出的空格字符 -c 检查文件是否已经按照顺序排序 -d 排序时,处理英文字母.数字及空格字符外,忽略其他的字符 -f 排序时,将小写字母视为大写字母 -i 排 ...
- AlvinZH掉坑系列讲解(背包DP大作战H~M)
本文由AlvinZH所写,欢迎学习引用,如有错误或更优化方法,欢迎讨论,联系方式QQ:1329284394. 前言 动态规划(Dynamic Programming),是一个神奇的东西.DP只能意会, ...
- 带领技术小白入门——基于java的微信公众号开发(包括服务器配置、java web项目搭建、tomcat手动发布web项目、微信开发所需的url和token验证)
微信公众号对于每个人来说都不陌生,但是许多人都不清楚是怎么开发的.身为技术小白的我,在闲暇之余研究了一下基于java的微信公众号开发.下面就是我的实现步骤,写的略显粗糙,希望大家多多提议! 一.申请服 ...