POJ 3233,HDU 5015 矩陣快速冪

2021-09-13 18:38:12 字數 2679 閱讀 3305

poj-3233

利用矩陣快速冪推出轉移矩陣。注意什麼時候取模,同時用printf一定要注意格式的問題,與型別要匹配。

這次的轉移矩陣是由一些子矩陣構成,不再是一些普通的常數了。×=

\left\ e&e\\ o&a \end \right\}\times \left\ s_\\ a_k \end \right\}= \left\ s_k\\ a_ \end \right\}

×=

#include

#include

#include

#include

using namespace std;

typedef

long

long ll;

struct matrix

;int mod;

matrix mul

(matrix a,matrix b,

int n)

return tmp;

}matrix pow

(matrix a,

int n,

int n)

return res;

}int

main()

for(i =

1; i <= n ; i++

) t.m[i]

[i]=1;

for(i =

1; i <= n ;i++

)for

(j = n+

1; j <=

2*n; j++

)for

(i =

1; i <= n ;i++

)for

(j =

1; j <= n ;j++

) n <<=1;

t =pow(t,k -

1,n)

; t =

mul(t,d,n)

; n >>=1;

for(i =

1; i <= n ;i++

)for

(j =

1; j <= n ;j++

)printf

("%d%c"

,t.m[i]

[j],j==n?

'\n'

:' ');

}}

hdu -5015

告訴你第一行和第一列分別是什麼數,然後告訴你遞推公式,讓你求a[n][m]是多少。

我們發現m特別大,因此考慮快速冪,主要是遞推矩陣不好想,這裡是以列轉移。

n +2

×=

n+2 \left\ 10&\cdots&\cdots&\cdots&\cdots&\cdots&1\\ 10&1&\cdots&\dots&\cdots&\cdots&1\\ 10&1&1&\cdots&\cdots&\cdots&1\\ 10&1&1&1\cdots&\cdots&\cdots&1\\ 0&0&\cdots& &&&1 \end \right\}\times \left\ a_\\ a_\\ \cdots\\ a_\\ 3 \end \right\}= \left\ a_\\ a_\\ \cdots\\ a_\\ 3 \end \right\}

n+2⎩⎪⎪

⎪⎪⎨⎪

⎪⎪⎪⎧

​101

0101

00​⋯

1110

​⋯⋯1

1⋯​⋯

…⋯1⋯

​⋯⋯⋯

⋯​⋯⋯

⋯⋯​1

1111

​⎭⎪⎪

⎪⎪⎬⎪

⎪⎪⎪⎫

​×⎩⎪

⎪⎪⎪⎨

⎪⎪⎪⎪

⎧​a0

,m−1

​a1,

m−1​

⋯an,

m−1​

3​⎭⎪

⎪⎪⎪⎬

⎪⎪⎪⎪

⎫​=⎩

⎪⎪⎪⎪

⎨⎪⎪⎪

⎪⎧​a

0,m​

a1,m

​⋯an

,m​3

​⎭⎪⎪

⎪⎪⎬⎪

⎪⎪⎪⎫

#include

#include

#include

#include

using namespace std;

typedef

long

long ll;

const

int mod =

10000007

;struct matrix

;int n;

matrix mul

(matrix a,matrix b)

return tmp;

}matrix pow

(matrix a,

int n)

return res;

}int

main()

}for

(int i =

0; i <= n; i++

) b.m[n +1]

[n +1]

=1; b =

pow(b , m)

; a =

mul(b , a)

; cout << a.m[n][0

]<< endl;

}}

poj 3233 矩陣快速冪

十個利用矩陣乘法解決的經典題目的最後一題 1a終於刷完十道題了,基本都是乙個思路 二分優化!a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 用二分變成 a 1 a 2 a 3 a 4 a 4 a 1 a 2 a 3 a 4 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a ...

poj3233(矩陣快速冪)

poj3233 給定n k,m 然後是n n行,我們先可以把式子轉化為遞推的,然後就可以用矩陣來加速計算了。矩陣是加速遞推計算的乙個好工具 我們可以看到,矩陣的每個元素都是乙個矩陣,其實這計算乙個分塊矩陣,我們可以把分塊矩陣展開,它的乘法和普通矩陣的乘法是一樣的。1 include 2 includ...

hdu5015 矩陣快速冪233(好題)

題意 給你乙個 n 1 m 1 的矩陣mat,然後給你mat 0 1 233 mat 0 2 2333,mat 0 3 23333.然後輸入mat 1 0 mat 2 0 mat 3 0 然後給了矩陣中的其他數值是mat i j mat i 1 j mat i j 1 最後讓你輸出mat n m 思...