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

正题

题目链接:https://darkbzoj.tk/problem/4161


题目大意

给出序列aaa,和hhh0∼k−10\sim k-10k1项,满足
hn=∑i=1naihn−ih_n=\sum_{i=1}^na_ih_{n-i}hn=i=1naihni
hnh_nhn

1≤n≤109,1≤k≤20001\leq n\leq 10^9,1\leq k\leq 20001n109,1k2000


解题思路

显然k≤2000k\leq 2000k2000我们就不能矩阵乘法了,然后就去研究了一下常系数线性齐次递推,而且这题k2k^2k2能过所以不用O(nlog⁡n)O(n\log n)O(nlogn)的多项式取模。

首先对于一个k×kk\times kk×k的矩阵AAA的特征多项式f(x)f(x)f(x)的定义是
f(x)=∑i=0kdet(A−kλ)xif(x)=\sum_{i=0}^kdet(A-k\lambda)x^if(x)=i=0kdet(Akλ)xi
而我们知道对于这种递推式的特征多项式就是
f(x)=xk−∑i=0k−1aixif(x)=x^k-\sum_{i=0}^{k-1}a_ix^if(x)=xki=0k1aixi

然后有个Cayley-Hamilton定理就是说对于AAA的特征多项式f(x)f(x)f(x)满足f(A)=0f(A)=0f(A)=0

如果按照这种特殊的特征多项式去理解的话挺好懂的,但是实际上的就不会证了。

那么我们如果要求一个转移矩阵An=Anmodf(A)A^n=A^n\mod f(A)An=Anmodf(A),我们可以求出一个多项式r(x)=xnmodf(x)r(x)=x^n\mod f(x)r(x)=xnmodf(x),然后直接把AAA带入这个多项式就好了。

这个东西要用到快速幂+多项式取模,O(k2)O(k^2)O(k2)的话实现起来很简单,考虑一个xk+i(i≥0)modf(x)x^{k+i}(i\geq 0)\mod f(x)xk+i(i0)modf(x)会发生什么,因为f(x)[k]=1f(x)[k]=1f(x)[k]=1所以⌊xk+if(x)⌋=xi\lfloor \frac{x^{k+i}}{f(x)}\rfloor=x^if(x)xk+i=xi相当于把xi(f(x)−xk)x^i(f(x)-x^k)xi(f(x)xk)再丢回去就好了。

然后我们得到了一个多项式r(x)r(x)r(x),考虑怎么计算答案,只需要计算An−kh⃗A^{n-k}\vec{h}Ankh的最后一项,所以我们实际上求的r(x)=xn−kmodf(x)r(x)=x^{n-k}\mod f(x)r(x)=xnkmodf(x),记r(x)r(x)r(x)iii次系数为bib_ibi,那么我们有
r(A)h⃗=∑i=0k−1biAih⃗r(A)\vec{h}=\sum_{i=0}^{k-1}b_iA^{i}\vec{h}r(A)h=i=0k1biAih
所以我们算出hhhk∼2k−1k\sim 2k-1k2k1项然后就有
hn=∑i=0k−1r(x)[i]hk+ih_n=\sum_{i=0}^{k-1}r(x)[i]h_{k+i}hn=i=0k1r(x)[i]hk+i

时间复杂度:O(k2log⁡n)O(k^2\log n)O(k2logn)

值得一提的是如果转移矩阵AAA不是一个递推式的矩阵,我们也可以用拉格朗日插值插出它的特征多项式从而降低平均的复杂度。


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=4100,P=1e9+7;
ll n,k,a[N],p[N],h[N],b[N],f[N],tmp[N];
void Mul(ll *a,ll *b,ll *c){memset(tmp,0,sizeof(tmp));for(ll i=0;i<k;i++)for(ll j=0;j<k;j++)(tmp[i+j]+=a[i]*b[j]%P)%=P;for(ll i=2*k-2;i>=k;i--)for(ll j=0;j<k;j++)(tmp[i+j-k]+=P-tmp[i]*p[j]%P)%=P;for(ll i=0;i<k;i++)c[i]=tmp[i];return;
}
signed main()
{scanf("%lld%lld",&n,&k);for(ll i=1;i<=k;i++)scanf("%lld",&a[i]),a[i]=(a[i]+P)%P,p[k-i]=P-a[i];for(ll i=0;i<k;i++)scanf("%lld",&h[i]),h[i]=(h[i]+P)%P;for(ll i=k;i<(k<<1);i++)for(ll j=1;j<=k;j++)(h[i]+=h[i-j]*a[j]%P)%=P;if(n<(k<<1))return printf("%lld\n",h[n])&0;b[1]=p[k]=f[0]=1;ll B=n-k,ans=0;while(B){if(B&1)Mul(f,b,f);Mul(b,b,b);B>>=1;}for(ll i=0;i<k;i++)(ans+=f[i]*h[i+k]%P)%=P;printf("%lld\n",ans);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318212.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P3258 [JLOI2014]松鼠的新家

文章目录题意&#xff1a;题解&#xff1a;树上差分代码&#xff1a;树链剖分代码&#xff1a;P3258 [JLOI2014]松鼠的新家题意&#xff1a; n个点&#xff0c;n-1条边&#xff0c;给出每个点的拜访顺序&#xff0c;问每个点经过几次&#xff08;最后一次移动不算拜访&#xf…

8.17模拟:数学

文章目录前言收获考场复盘T1T2T3T4总结前言 190分 60100300 虽然分不太高&#xff0c;但毕竟今天的题有点太阴间了… 所以还不错啦 最重要的是今天挂分很少 终于停住了这几天越挂越嗨的态势 也就T4挂了5分吧&#xff0c;可以接受 收获 算斜率的区间确定一条线旋转位置时要取…

牛客-小w的魔术扑克【并查集】

正题 题目链接:https://ac.nowcoder.com/acm/contest/1100/C 题目大意 nnn个数字mmm张扑克牌&#xff0c;每张两面有各有一个数字&#xff0c;可以选择一些扑克牌使用正面的数字&#xff0c;一些使用反面的&#xff0c;qqq次询问能否凑出l∼rl\sim rl∼r。 1≤n,m,q≤1051\leq…

[SOCI2005]最大子矩阵(DP) + [JXOI2018]守卫(DP) + [CQOI2016]手机号码(数位DP)[各种DP专练]

DP专练博客 DP专练T1&#xff1a;最大子矩阵题目题解代码实现T2&#xff1a;守卫题目题解代码实现T3&#xff1a;手机号码题目题解代码实现T1&#xff1a;最大子矩阵 题目 这里有一个n*m的矩阵&#xff0c;请你选出其中k个子矩阵&#xff0c;使得这个k个子矩阵分值之和最大。…

【做题记录】位运算

CF1592E Bored Bakry 题意&#xff1a;找出最长的区间 \([l,r]\) 满足 \(a_{l}\&a_{l1}\&\dots\&a_{r-1}\&a_{r}>a_{l}\oplus a_{l1}\oplus\dots\oplus a_{r-1}\oplus a_{r}\) 。 首先发现如果有一段满足这个条件的区间&#xff0c;那么一定有一个(较高的)二…

IdentityServer4-EF动态配置Client和对Claims授权(二)

本节介绍Client的ClientCredentials客户端模式&#xff0c;先看下画的草图&#xff1a;一、在Server上添加动态新增Client的API 接口。为了方便测试&#xff0c;在Server服务端中先添加swagger&#xff0c;添加流程可参考&#xff1a;https://www.cnblogs.com/suxinlcq/p/67575…

P3178 [HAOI2015]树上操作

P3178 [HAOI2015]树上操作 题意&#xff1a; 题解&#xff1a; 这已经是很裸的树链剖分了。。。 直接套模板 代码&#xff1a; #include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespac…

8.18模拟:构造

文章目录前言收获考场复盘T1T2T3T4总结前言 190分 10006030 明明是dfs专题 不太理想qwq 写了三个dfs就离谱 最不满意的是T2的爆零 其实分类讨论一下是很可做的 而且暴力还因为没开ll挂掉了… 不过毕竟构造题之前几乎没有做过 所以慢慢来吧 收获 一些构造题的trick 调整法数…

P5371-[SNOI2019]纸牌【矩阵乘法】

正题 题目链接:https://www.luogu.com.cn/problem/P5371 题目大意 有nnn种牌&#xff0c;每种牌最多CCC张&#xff0c;XXX个限制形如kik_iki​种牌至少aia_iai​张。 求所有牌的序号能分成(i,i,i)(i,i,i)(i,i,i)或者(i,i1,i2)(i,i1,i2)(i,i1,i2)的若干组的方案数。 1≤n≤10…

dotnet core开源博客系统XBlog介绍

XBlog是dotnet core平台下的个人博客开源系统&#xff0c;它只需要通过Copy的方式即可以部署到Linux和windows系统中&#xff1b;如果你有安全证书那只需要简单配置一下即可提供安全的Https服务。接下来主要介绍XBlog功能、部署和基础设置。技术要点基于dotnet core平台&#x…

【做题记录】max-min+1=len 区间计数

(来源&#xff1a;XJ高质量原创题) 原题地址 弱化版&#xff1a;CF526F Pudding Monsters 弱化版 题意&#xff1a;\(n\times n\) 的棋盘上有 \(n\) 颗棋子&#xff0c;每行每列都有且仅有一颗棋子&#xff0c;求出有多少个 \(k\times k\) 的子棋盘也满足每行每列只有一颗棋子。…

【莫队/树上莫队/回滚莫队】原理详解及例题:小B的询问(普通莫队),Count on a tree II(树上莫队),kangaroos(回滚莫队)

文章目录问题引入介绍莫队算法及其实现过程时间复杂度莫队算法适用范围莫队奇偶优化普通莫队&#xff1a;小B的询问树上莫队&#xff1a;SP10707 COT2 - Count on a tree II回滚莫队&#xff1a;[PA2011]Kangaroosupd&#xff1a;2021-08-11&#xff1a;重新对博客进行了外观美…

P2146 [NOI2015] 软件包管理器

P2146 [NOI2015] 软件包管理器 题意&#xff1a; 如果软件包 a 依赖软件包 b&#xff0c;那么安装软件包 a 以前&#xff0c;必须先安装软件包 b。同时&#xff0c;如果想要卸载软件包 b&#xff0c;则必须卸载软件包 a。 软件包之间存在依赖关系&#xff0c;除了0号软件包以…

微软 2018 开源大事记

从微软公开宣布 "Microsoft love linux" 那一刻起&#xff0c;过去的几年里&#xff0c;微软积极拥抱开源的举动我们有目共睹&#xff0c;即便有过"Linux is a cancer"这种真香警告的 flag&#xff0c;但不得不承认的是&#xff0c;微软一系列“拥抱开源”…

模板:二叉搜索树平衡树

文章目录前言二叉搜索树代码treap代码splay开点旋转splay插入查找第k大元素查找给定元素的排名前驱&后继删除完整代码练习总结前言 终于开始学这个东西了 看了好几篇博客才找到一篇可读的qwq 我曾经还以为线段树码量大…我真傻&#xff0c;真的 所谓平衡树&#xff0c;就是…

51nod2626-未来常数【树上启发式合并,线段树】

正题 题目链接:http://www.51nod.com/Challenge/Problem.html#problemId2626 题目大意 给出nnn个点的一棵树&#xff0c;每个区间[l,r][l,r][l,r]的代价是选出这个区间中的一个点xxx使得它走到所有点然后又回到xxx的路程最短长度&#xff0c;求一个随机区间的期望代价。 1≤n…

A*,IDA*—高档次的暴搜

A*通过评价函数来判断当前状态是否可以到达最终状态(即可行性剪枝)&#xff0c;来减少不必要的搜索。 例题——P2324 [SCOI2005]骑士精神 我们通过当前不在指定位置上的棋子个数为评价函数&#xff0c;\(used\) 【评价函数值】超过了预期的值&#xff0c;便不用再线下深入搜索了…

P2486 [SDOI2011]染色

P2486 [SDOI2011]染色 题意&#xff1a; 题解&#xff1a; 与一般的树链剖分相比&#xff0c;不同点在于查询的不是路径上颜色的数量而是颜色段的数量 对于两个颜色段&#xff0c;112和221&#xff0c;两个颜色段数量都是2 如果合在一起颜色段的数量就是3&#xff0c;因为左边…

牛客网CSP-S提高组赛前集训营1题解(仓鼠的石子游戏 [博弈论] + 乃爱与城市的拥挤程度 [树上DP] + 小w的魔术扑克[dfs + 离线])

文章目录T1&#xff1a;仓鼠的石子游戏题目题解代码实现T2&#xff1a;乃爱与城市拥挤程度题目题解代码实现T3&#xff1a;小w的魔术扑克题目题解代码实现T1&#xff1a;仓鼠的石子游戏 题目 仓鼠和兔子被禁止玩电脑&#xff0c;无聊的他们跑到一块空地上&#xff0c;空地上有…

使用PerfView监测.NET程序性能(二):Perfview的使用

在上一篇博客使用PerfView监测.NET程序性能&#xff08;一&#xff09;&#xff1a;Event Trace for Windows 中&#xff0c;我们了解了对Windows及应用程序进行性能分析的基础&#xff1a;Event Trace for Windows (ETW)。现在来看看基于ETW的性能分析工具——Perfview.exePer…