hdu4965 巧用矩陣乘法結合律

2022-09-05 01:27:09 字數 1580 閱讀 3234

題意:

給兩個矩陣,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;

inta[1002][8] ,b[8][1002] ,c[1002][1002];

intnmm[1002][8];aa mat_matba(

intn,

intm)

aa mat_mat(aa a,aa b,

intn)

aa quick_mat(aa a,

intb,

intn)

returnc;

}voidmat_matnmm(aa mm,

intn,

intm)

voidmat_matnmmn(

intn,

intm)

intmain

()return0;

}

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...