
矩阵相乘
JW_7066
这个作者很懒,什么都没留下…
展开
-
hdu 2276 Kiki & Little Kiki 2 (矩阵快速幂)
题意: 一个时间t,一串由0和1组成的字符串s,长为n,编号为1~n,1代表灯是开的,0代表灯是关的,每次交换时,如果它的左边是1,那么它本身的状态改变,否则不变,1号灯的左边是n号灯,求t秒以后的状态(每一秒整个字符串的状态改变一次) 解题思路: 首先就是要先发现规律 第i个状态 = ( 前一个状态+它本身状态 )%2 发现这个一切好办,如果长为5,那么矩阵相乘 前一秒的原创 2015-05-09 16:31:40 · 525 阅读 · 0 评论 -
FZU 2173 Nostop(矩阵快速幂+floyd)
题目链接:【FZU 2173】 M国有N个城市,H条单向的道路,AekdyCoin从编号为1的城市出发,每经过一条道路要花一个单位的时间。假设他出发的时刻为0,他需要在K时刻到达编号为N的城市。并且,AekdyCoin不会在一个城市停留,每到一个城市他要立刻往下一个城市出发,最后在K时刻时他必须在城市N。虽然AekdyCoin经过任意一条道路的花费的时间都是1,但是每条道路的过路费不一定相同。现原创 2016-01-29 14:08:10 · 621 阅读 · 0 评论 -
fzu 1683 纪念SlingShot (矩阵快速幂)
解题思路: 求和需要小小的处理一下 构造矩阵,一开始定义sum=f[0]+f[1] sum 1 1 0 0 sum f[3] 0 3 2 7 f[2] f[2] = 0 1 0 0 * f[1] f[1]原创 2015-05-19 23:36:04 · 735 阅读 · 0 评论 -
hdu 2254 奥运(矩阵 感觉挺难的)
都说是经典题 http://http://acm.hdu.edu.cn/showproblem.php?pid=2254 解题思路: 城市最多有30个,然而p1,p2最大确实2^32,一般情况下,要开数组p[ 2^32 ][ 2^32 ]来存p1,p2之间的路径,这不太科学,所以应该用map稍稍处理一下,将数组开在30以内。 p[ 0 ].a[ i ][ j ]表示的是从i到j的路径数,我原创 2015-06-04 22:49:21 · 471 阅读 · 0 评论 -
hdu 2604 Queuing(矩阵快速幂)
题意: 一个字符串长为L,由f和m组成,字符串包含fff和fmf的叫做O队列,其余叫E队列,求有多少个E队列(输出对m取余后的值) 解题思路: 字符串编号1~L,第L位有两种可能,m和f,用F[ i ]表示到第i位时的种类 假设第L位是m,那么此时字符串的种类有F[L-1] 假设第L位是f,那么最后三位有四种可能:mmf, mff, fmf, fff,其中fff和fmf不符合要求,原创 2015-05-19 20:48:01 · 493 阅读 · 0 评论 -
hdu 2256 Problem of Precision(矩阵快速幂 推公式)
题意: 给出n,求((sqrt(2)+sqrt(3))^(2*n))%1024 解题思路: (sqrt(2)+sqrt(3))^2 = (5+2*sqrt(6)) (5+2*sqrt(6))^n = Xn+Yn*sqrt( 6 ) = ( Xn-1+Yn-1*sqrt( 6 ) ) * ( 5+2*sqrt( 6 ) )原创 2015-05-18 20:17:29 · 663 阅读 · 1 评论 -
HDU 1588 Gauss Fibonacci(矩阵 + 斐波那契)
题意: 已知g( i ) = k*i+b,f( i )是斐波那契数列 输入k,b,n,mod,当0 解题思路: 直接一项一项求,那肯定得超时啊,凭直觉,肯定得用矩阵,可关键就是如何去构造 显然,g( i )是一个等差数列,那f( g(i) )也肯定是有某种规律的,我们可以大胆假设它是等差或等比,如果想跟矩阵结合,那么等差的可能性就不大,那就可能是等比 拿第一组数据凑一下,k=2原创 2015-05-26 23:05:09 · 715 阅读 · 2 评论 -
HDU 1575 Tr A(矩阵快速幂 水 入门)
题意: 求m个n*n的矩阵相乘后的矩阵的对角线之和 简单的矩阵相乘,可当入门题,套套模板就可以了 #include #include #include #include using namespace std; #define mod 9973 int n; struct matrix { int a[15][15]; }; matrix mul(matrix a,ma原创 2015-05-14 22:16:41 · 429 阅读 · 0 评论 -
hdu 1757 A Simple Math Problem(矩阵快速幂 水~)
题意: If x If x >= 10 f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + …… + a9 * f(x-10); 输入k,m以及a0,a1,a2.....a9,计算f(k)%m 解题思路: 构造矩阵 矩阵a原创 2015-05-15 22:07:45 · 451 阅读 · 0 评论 -
ZOJ 2573 DNA Problem(矩阵快速幂)
题意: 基因题意: N个基因 经过M次突变 A代表S1,B代表S2, 比如第一组数据,它的突变顺序就是S1,S2,S2,S1,S2,S2....我们要输出经过M次变异后的基因 接下来不是有两个N*N的东西吗,第一个就是代表S1,第二个代表S2,举个例子 0 1 0 0 1 1 0 1 0 (横着是i,竖着是j) 当i=0时,如何判断第i个基因是alive还是dead,就原创 2015-05-11 00:37:45 · 511 阅读 · 0 评论 -
hdu 4965 Fast Matrix Calculation(矩阵快速幂)
题意: 矩阵A是n*k,矩阵B是k*n,矩阵C = A*B,先求C^(n*n),再对矩阵C的每个元素对6取余,输出矩阵C的元素和 解题思路: 直接按照题目顺序来求会超时 ( A*B )^( n*n ) = A*((B*A)^( n*n -1) )*B 先算P = (B*A)^( n*n -1) 再算A*P*B 这样转化的好处是在用矩阵快速幂计算时可以转化为6*原创 2015-05-09 23:54:07 · 390 阅读 · 0 评论 -
矩阵快速幂的写法(模板)
首先一般会定义一个结构体 struct matrix { int a[n][m]; }; 2*2的矩阵直接可以用两个for matrix mul(matrix a, matrix b) { matrix ret; for(int i=0;i<2;i++) { for(int j=0;j<2;j++) { ret.a[i][j] = (a.a[i][0]*原创 2015-05-08 20:49:57 · 704 阅读 · 0 评论