構造矩陣 矩陣快速冪 POJ3735

2021-08-07 16:49:44 字數 874 閱讀 9912

這題題意如下,有n 只貓咪,三種關於花生的命令 ( 得花生,吃花生,交換花生 ) ,給出一套命令,重複 n 次,問最後每只貓咪得到多少花生。

m那麼大,毫無疑問,矩陣快速冪。

先構造乙個單位矩陣,因為只需在單位矩陣上進行操作,然後用操作完之後得到的矩陣乘以初始的狀態就得到最終的狀態。

看下圖:

第 i 只貓咪得花生就是在矩陣的第 i 行的最後一列加上1;

注意:如果是 n 只貓咪的話,要用n+1維的矩陣,即n+1維的方陣,多出來的乙個才能起到操作的作用!

下面是重點,就是矩陣的快速冪,思路和整數的快速冪一樣,不過該過程中會用稀疏矩陣出現,故可藉此優化,即跳過0元素;

**如下:

#include

#include

#include

#include

#define ll long long

using

namespace

std;

ll n,m,k;

struct matrix

init;

matrix multi(matrix x,matrix y)}}

return ans;

}matrix mq(ll m)//矩陣快速冪

return ans;

}int main()

else

if(c[0]=='e')

else

}matrix ans=mq(m);

for(int i=0; i1; i++)

printf("%lld ",ans.a[i][n]);

printf("%lld\n",ans.a[n-1][n]);}}

矩陣快速冪 矩陣構造

fibonacci數列 f 0 1 f 1 1 f n f n 1 f n 2 我們以前快速求fibonacci數列第n項的方法是 構造常係數矩陣 一 fibonacci數列f n f n 1 f n 2 f 1 f 2 1的第n項快速求法 不考慮高精度 解法 考慮1 2的矩陣 f n 2 f n ...

矩陣快速冪的構造

參考部落格 a i a i 1 b i 1 1,b i 2 a i 1 5 a 1 1,b 1 1,問a x b x 很簡單的遞推,一步步推即可,但是,如果x是10 9,如何推?思維 遞推式可以化為矩陣乘積 那麼,矩陣a i a i 1 b a i 1 a i b a i 1 bb a x a 1 ...

矩陣快速冪 構造方法

與快速冪一樣,可以將遞推式通過二進位制的方式來進行優化,這個學了快速冪就是十分容易理解 大概的板子如下 struct mat 自己定義大小的矩陣 mat mulmat mat a,mat b 兩個矩陣相乘 return ans 最後的矩陣,答案 int main 這個與快速冪寫法略有不同,主要是因為...