题目: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) 次,用递推式暴力把给出的 \(h_0,...,h_{k-1}\) 扩展到 \( h_0,...,h_{2*(k-1)} \) ,然后用 \( h_{k-1},...,h_{2*(k-1)} \) 乘上刚才做出的多项式得到答案。关于这个的理解:

  现在的多项式可以看作是转移矩阵 M 的 n-(k-1) 次幂的第一列。考虑到原来的值向量对应位乘上该多项式就是第 n-(k-1) 次项的答案,所以大概可以这样考虑?

  所以这个多项式可以在 \( h_i,...,h_{i+k-1} \) 乘上它的情况下得到 \( h_{i+n-(k-1)} \) 的答案。

但直接把多项式乘到 n 次,然后用初始的 \( h_0,...,h_{k-1} \) 来乘,在 bzoj 上似乎比上述方法稍微快一点。

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
int rdn()
{
int ret=;bool fx=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')fx=;ch=getchar();}
while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
return fx?ret:-ret;
}
const int N=,mod=1e9+;
int upt(int x){while(x>=mod)x-=mod;while(x<)x+=mod;return x;} int n,k,a[N],h[N],b[N],c[N],ans[N];
void Mul(int *u,int *v)
{
memset(c,,sizeof c);
for(int i=;i<k;i++)
for(int j=;j<k;j++)
c[i+j]=(c[i+j]+(ll)u[i]*v[j])%mod;
for(int i=*(k-);i>=k;i--)
if(c[i])
for(int j=;j<=k;j++)
c[i-j]=(c[i-j]+(ll)c[i]*a[j])%mod;
memcpy(u,c,sizeof (int)*k);
}
int main()
{
n=rdn();k=rdn();
for(int i=;i<=k;i++)a[i]=upt(rdn());//upt!!!
for(int i=;i<k;i++)h[i]=upt(rdn());
if(n<k){printf("%d\n",h[n]);return ;}
/*for(int i=k,lm=2*(k-1);i<=lm;i++)
for(int j=1;j<=k;j++)
h[i]=(h[i]+(ll)a[j]*h[i-j])%mod;
if(n<=2*(k-1)){printf("%d\n",h[n]);return 0;}*/
b[]=; ans[]=;
/*n-=k-1;*/
while(n){ if(n&)Mul(ans,b); Mul(b,b); n>>=;}
int prn=;
/*for(int i=0;i<k;i++)
prn=(prn+(ll)h[k-1+i]*ans[i])%mod;*/
for(int i=;i<k;i++)
prn=(prn+(ll)h[i]*ans[i])%mod;
printf("%d\n",prn);
return ;
}

bzoj 4161 Shlw loves matrixI——常系数线性齐次递推的更多相关文章

  1. bzoj 4161: Shlw loves matrixI

    Description 给定数列 {hn}前k项,其后每一项满足 hn = a1h(n-1) + a2h(n-2) + ... + ak*h(n-k) 其中 a1,a2...ak 为给定数列.请计算 ...

  2. bzoj 4161 Shlw loves matrixI【常系数线性齐次递推】

    并不会递推,不过板子挺好背的,只要是类似的递推都能用,但是注意c数组不能使负数 如果除了递推还有常数项的话,就用f[i]-f[i-1]的方式消掉常数项(然后多一个f[i-1]的项) #include& ...

  3. BZOJ 4161 Shlw loves matrixI ——特征多项式

    矩阵乘法递推的新姿势. 叉姐论文里有讲到 利用特征多项式进行递推,然后可以做到k^2logn #include <cstdio> #include <cstring> #inc ...

  4. LOJ 2304 「NOI2017」泳池——思路+DP+常系数线性齐次递推

    题目:https://loj.ac/problem/2304 看了各种题解…… \( dp[i][j] \) 表示有 i 列.第 j 行及以下默认合法,第 j+1 行至少有一个非法格子的概率,满足最大 ...

  5. 模板-->常系数线性齐次递推(矩阵快速幂)

    如果有相应的OJ题目,欢迎同学们提供相应的链接 相关链接 所有模板的快速链接 Matrix模板 poj_2118_Firepersons,my_ac_code 简单的测试 None 代码模板 /* * ...

  6. 【Learning】常系数线性齐次递推

    给定数列前k项\(h_0...h_{k-1}\),其后的项满足:\(h_i=\sum_{i=1}^kh_{i-j}a_i\),其中\(a_1...a_k\)是给定的系数,求\(h_n\) 数据范围小的 ...

  7. bzoj4161: Shlw loves matrixI

    Description 给定数列 {hn}前k项,其后每一项满足 hn = a1*h(n-1) + a2*h(n-2) + ... + ak*h(n-k) 其中 a1,a2...ak 为给定数列.请计 ...

  8. 【BZOJ4161】Shlw loves matrixI (常系数齐次线性递推)

    [BZOJ4161]Shlw loves matrixI (常系数齐次线性递推) 题面 BZOJ 题解 \(k\)很小,可以直接暴力多项式乘法和取模. 然后就是常系数齐次线性递推那套理论了,戳这里 # ...

  9. 【BZOJ4161】Shlw loves matrixI

    题目描述 给定数列 {hn}前k项,其后每一项满足 hn = a1h(n-1) + a2h(n-2) + ... + ak*h(n-k) 其中 a1,a2...ak 为给定数列.请计算 h(n),并将 ...

随机推荐

  1. Altium Designer chapter5总结

    PCB设计环境中需要注意的如下: (1)PCB设计步骤:绘制原理图和生成网表—规划电路板—载入网表—元件布局—制定设计规则—布线—后期处理—DRC检查—信号完整性分析—gerbera文件输出 (2)P ...

  2. php优化方法

    代码优化是开发程序和网站必不可少的一步,代码优化好了,可以大大增加程序的运行效率.使网站或程序加载反应更快.用户体验也就会更好.下面就为大家总结了50条PHP代码优化技巧. 1. 用单引号代替双引号来 ...

  3. Learning OSG programing---osgAnimation(3)

    接下来是用createModel函数创建模型: osg::ref_ptr<osg::Group> createModel(bool overlay, osgSim::OverlayNode ...

  4. 前端webpack & vue

    地址 : https://blog.csdn.net/jiang7701037

  5. python 丰田经销商

    import requests import json from dbutil.pgsql import PgsqlPipeline from datetime import date headers ...

  6. Linux远程软件xshell的使用

    Xshell是一个linux远程命令行软件 有免费版不用破解,安装包可以找有关人士获取 要新远程一台机,可以新建会话,输入被远程系统的参数 新建会话后,点连接开始远程 远程成功的样子

  7. CSRF相关

    CSRF原理 第一次获取页面的时候浏览器返回一个随机字符串,之后提交数据的时候需要把到这个字符串去提交,不然会报错 返回的时候还会把这个字符串放到cookie里面, 使用form提交时候: {% cs ...

  8. Linux统计文件内容

    wc:统计文件的行数.单词数.字节数(word count) - wc char.txt:统计出文件char.txt的换行符个数.单词数.字节数 (char.txx有14行.13个单词.66字节) - ...

  9. 前端对base64编码的理解,原生js实现字符base64编码

    目录 常见对base64的认知(不完全正确) 多问一个为什么,base64到底是个啥? 按照我们的思路实现一下 到这里基本就实现了,结果跟原生的方法打印的是一样的 下一次 @( 对于前端工程师来说ba ...

  10. JavaScript深入之词法作用域和动态作用域(转载)

    作用域 作用域是指程序源代码中定义变量的区域. 作用域规定了如何查找变量,也就是确定当前执行代码对变量的访问权限. JavaScript 采用词法作用域(lexical scoping),也就是静态作 ...