经历了一发被虐以后,我发现我对矩阵乘法一无所知...
于是开始补坑QAQ
感觉矩乘貌似写起来不是很麻烦就不放代码了(其实是你懒得写)
一、基础
大体过程
—>
我一般的理解方式就是我们在第一个矩阵框一行,然后在第二个矩阵框一列,然后他们的交点的地方就是我们放值的地方。
、
这个样子(?)
矩阵乘法的基本性质
1.满足结合律->这也是我们可以矩阵快速幂计算答案的基础
2.不满足交换律,这很显然因为交换以后行列数会变化,然而矩阵乘法要求第一个矩阵的列数等于第二个矩阵的行数,所以不满足交换律。
我现在的水平大概用这些就够了(?)以后再补坑
二、例题
当然是我们最常规的求斐波那契数列第K项啦
首先我们写出递推式
然后我们观察递推式有两项,我们可以用一个的矩阵来写出来
我们把最后一个矩阵的式子化一下就是
是不是就是我们想要的式子!!!
然后我们用快速幂的方法处理第二个矩阵的次幂第一项就是我们的答案啦
由于笔者水平有限...只会凑数凑矩阵...emm...如果在读这个傻傻的blog的你会更好的办法那么请私信我或者评论!!谢谢orz
三、练习
笔者从网上搜罗到的一点题...水平有限求轻喷QAQ
1.CodeVS1281 Xn数列
给你6个数,m, a, c, x0, n, g
Xn+1 = ( aXn + c ) mod m,求Xn
m, a, c, x0, n, g<=10^18
应该也是经典题吧(?)我不会QAQ看了一发hzwer学长的题解发现随便构造一下就可以了QAQ
同样后面的式子化简一发就是
依然可以矩阵快速幂搞定
2.CH30 摆花
背景及描述
艺术馆门前将摆出许多花,一共有n个位置排成一排,每个位置可以摆花也可以不摆花。有些花如果摆在相邻的位置(隔着一个空的位置不算相邻),就不好看了。假定每种花数量无限,求摆花的方案数。
输入格式
输入有1+m行,第一行有两个用空格隔开的正整数n、m,m表示花的种类数。接下来的m行,每行有m个字符1或0,若第i行第j列为1,则表示第i种花和第j种花不能排在相邻的位置,输入保证对称。(提示:同一种花可能不能排在相邻位置)。
输出格式
输出只有一个整数,为方案数(这个数字可能很大,请输出方案数除以1000000007的余数)。
还是经典题QwQ依然不会做emm通过这个题找到了一点手感吧QwQ
我们先写出DP转移方程
我们可以把矩阵a的第0行 第0列全部赋为1然后我们拿这个矩阵直接快速幂就可以了!
撕烤了一下发现非常有道理QwQ
3.bzoj2326[HNOI2011]数学作业
Description
小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题:给定正整数 N 和 M
要求计算 Concatenate (1 .. N) Mod M 的值,其中 Concatenate (1 ..N)是将所有正整数 1, 2, …, N 顺序连接起来得到的数。
例如,N = 13, Concatenate (1 .. N)=12345678910111213.小C 想了大半天终于意识到这是一道不可能手算出来的题目,
于是他只好向你求助,希望你能编写一个程序帮他解决这个问题。
Input
只有一行且为用空格隔开的两个正整数N和M,
1≤N≤10^18且1≤M≤10^9.
Output
仅包含一个非负整数,表示 Concatenate (1 .. N) Mod M 的值。
这一题真的是看到了秒了QwQ!然后拿给SCB神犇看,然后他顺手切了...我本来以为我突然灵光乍现...其实是题水啦...QAQ
写一下转移cnt(i)表示位数
我们发现当N的位数发生变化的时候算起来是不一样的所以我们可以对F分段求
我们先暴力算出N=10^k的情况。
然后构造一发矩阵
非常优秀对不对!!!然后我们依然可以矩阵快速幂解决!!!
预告:bzoj1009 GT考试
由于笔者这几个题都还没写所以滚粗去写了QAQ