題意:
給兩個矩陣,n*m的矩陣a,和m*n的矩陣b,
求(a*b)^(n*n)其中 m<=6,n<=1000。
思路:一開始直接模擬,寫了個矩陣快速冪,超時了,因為a*b後得到的是1000*1000的矩陣,做乘法直接超時了,後來寫了個這樣的
(a*b)^(n*n) = (a*b)*(a*b)*(a*b)...
= a * (b*a)*(b*a)*(b*a)...*b
矩陣雖然沒有交換律但是有結合律,我們直接先b*a(得到的是乙個最大6*6的矩陣)然後快速冪,然後再a * ba^(n*n-1) * b這樣就行了,然後又超時了,算了很多次,感覺不可能超時,但還是超時了,原因就是我所有的矩陣用的都是mat[1002][1002]為了方便我都開結構體了,結果各種超時,最後沒辦法了,全都開陣列,然後去模擬,a[1002][8],b[8][1002],ba[8][8]...,這樣就ac了,難道開大的陣列也會浪費很多時間?(這個地方頭一次碰到)。
#include#includetypedef struct aa;int
a[1002][8] ,b[8][1002] ,c[1002][1002];int
nmm[1002][8];aa mat_matba(int
n,int
m) aa mat_mat(aa a,aa b,int
n) aa quick_mat(aa a,int
b,int
n)return
c;}void
mat_matnmm(aa mm,int
n,int
m)void
mat_matnmmn(int
n,int
m)intmain
()return
0;}
hdu4965 巧用矩陣乘法結合律
題意 給兩個矩陣,n m的矩陣a,和m n的矩陣b,求 a b n n 其中 m 6,n 1000。思路 一開始直接模擬,寫了個矩陣快速冪,超時了,因為a b後得到的是1000 1000的矩陣,做乘法直接超時了,後來寫了個這樣的 a b n n a b a b a b a b a b a b a b...
hdu 4965 矩陣快速冪
給定兩個矩陣a,b,分別為n k和k n 求出矩陣c a b,矩陣m c n n 將矩陣m中的所有元素取模6,得到新矩陣m 並計算矩陣m 中所有元素的和 注意到ba 得到 6 6,而ab 得到1000 1000 轉化乘法算式為 m abababab.a ba n n 1 b 直接用矩陣快速冪即可 i...
hdu4920(矩陣 乘法)
題意 矩陣乘法,在乘的過程中每個元素都取模3 在比賽時,我一直在想怎麼才能把o n n n 的時間複雜度給降下來,可是一直沒想到好的辦法,後來看了題解後才知道原來時間複雜度還是o n n n 只是優化了一點而已 如下 include include include include include i...