HDU 4965 Fast Matrix Calculation 矩陣快速冪
題意:一個矩陣N*K的矩陣A,一個K*N的矩陣B,(4 <= N <= 1000,2 <=K <= 6)。先進行矩陣乘法C=A*B,然後進行D=C^(N*N)的冪運算,然後對D的每個數對6取模,最後求出D的所有位置數字之和。
思路:像之前那道矩陣乘法一樣,特別大的矩陣直接進行乘法在沒有小規律的幫助時是不可能直接過的(目前看即使是Strassen矩陣算法也不會加速到要求以內)題目中給的C矩陣是1000*1000的矩陣進行快速冪是一定超時的,所以我注意到了A矩陣的列數和B矩陣的行數K是不超過六的,而6*6的矩陣進行快速冪是沒問題的。D=A*B*A*B*...*A*B*A*B,可以看成D=A*(B*A*...*B*A)*B。這樣既不影響矩陣左乘和右乘的關系,又能防止行列數太大爆掉。(題裡的小細節是挺厲害的,首先爆棧的問題需要解決,然後還有矩陣的賦值運算也是O(N)的復雜度)
代碼:
#pragma comment(linker, /STACK:1024000000,1024000000)
#include
#include
#include
#include
#include
#include
#include
#include
#include