POJ2118基礎矩陣快速冪

2021-06-29 14:25:33 字數 1355 閱讀 2802

題意:

an=σ1<=i<=kan-ibi mod 10 000 for n >= k,題意看了好久才懂,有點蛋疼啊,

這個題目要是能看懂題意就簡單了,先給你k,然後給你a0 a1 a2 a3 ..ak-1.

然後給你b1 b2 b3 b4 ..bk,然後給你乙個i,讓你輸出ai的值,如果i < k直接輸出輸入時的ai就行,否則就按照他給的那個公式

an=σ1<=i<=kan-ibi mod 10 000 for n >= k

比如k=3

那麼 a3 = a2*b1 + a1*b2 + a0*b3

a4 = a3*b1 + a2*b2 + a1*b3

a5 = a4*b1 + a3*b2 + a2*b3

a6 = a5*b1 + a4*b2 + a3*b3

......

下面構造矩陣 ,這個矩陣是k*k的,也就是每次都是變的,但是有規律,最大是100*100

,拿k=3舉例子

a3 a2 a1  0 0 b1  a2 a3 a4

1 0 b2

0 1 b3

這樣就輕鬆構造這個矩陣了吧,要是k=4也一樣

0 0 0 b1

1 0 0 b2

0 1 0 b3

0 0 1 b4

....

好啦就說這麼多,最近在忙活寫伺服器玩,去寫自己的伺服器嘍......

#include#include#define mod 10000

typedef struct

m;m matm(m a ,m b ,int n)

m qpowmat(m a ,int b ,int n)

return c;

}int main ()

memset(star.mat ,0 ,sizeof(star.mat));

for(i = 1 ;i < k ;i ++)

star.mat[i+1][i] = 1;

for(i = 1 ;i <= k ;i ++)

star.mat[i][k] = b[i];

ans = qpowmat(star ,n - k + 1 ,k);

int sum = 0;

for(i = 1 ;i <= k ;i ++)

sum = (sum + a[i-1] * ans.mat[i][k]) % mod;

printf("%d\n" ,sum);

}return 0;

}

POJ 2118 矩陣乘法來解線性遞推

看了matrix67關於fibonacci那段的講解.就和狐狸大牛一起去poj做了這道.我了個去我了個擦.600多個人做200多個過真的大丈夫?第一次做這種這麼少人做的題很是緊張.囧.其實理解了用矩陣來解線性遞推的方法.這題.模板題.記住幾個關鍵.用矩陣乘法來解線性遞推,首先當然是構造矩陣a.這個矩...

POJ 2118 矩陣乘法來解線性遞推

看了matrix67關於fibonacci那段的講解.就和狐狸大牛一起去poj做了這道.我了個去我了個擦.600多個人做200多個過真的大丈夫?第一次做這種這麼少人做的題很是緊張.囧.其實理解了用矩陣來解線性遞推的方法.這題.模板題.記住幾個關鍵.用矩陣乘法來解線性遞推,首先當然是構造矩陣a.這個矩...

矩陣快速冪 快速冪模板poj3070

poj3070 題意就是通過,矩陣求斐波那契數列數列 如果不知道遞推怎麼來的,或者不知道矩陣快速冪的,可去 看不懂打我 其實矩陣快速冪和快速冪乙個思想來的,都差不多,矩陣快速冪就是把快速冪的乘法運算換成矩陣乘法,再加上一點矩陣知識。快速冪模板 define ll long long int ll q...