poj3233經典二分矩陣快速冪

2021-07-16 10:07:45 字數 977 閱讀 8641

這個有個難點,就是他那個是到10的9次方,所以就是說,應該不能乙個乙個加,看了別人的方法就是用二分的方法,

思路:這是一道典型的矩陣快速冪的問題。用到兩次二分,相當經典。矩陣快速冪。首先我們知道 a^x 可以用矩陣快速冪求出來。其次可以對k進行二分,每次將規模減半,分k為奇偶兩種情況,如當k = 10和k = 5時有:

k = 10 有: s(10) = ( a^1+a^2+a^3+a^4+ a^5 ) + a^5 * ( a^1+a^2+a^3+a^4+a^5 ) = s(5) + a^5 * s(5)

k = 5 有: s(5) = ( a^1+a^2 ) + a^3 + a^3 * ( a^1+a^2 ) = s(2) + a^3 + a^3 * s(2)

k = 2 有 : s(2) = a^1 + a^2 = s(1) + a^1 * s(1)。

應用這個式子後,規模k減小了一半。我們二分求出後再遞迴地計算,即可得到原問題的答案。

然後呢?就是不要亂mol,因為資料分為只有10的4次方,所以不用那麼亂mol,我亂mol就tle了

#include

#include

#include

using

namespace

std;

int n , mol ;

struct martixans ,base;

martix mult(martix x,martix y)//矩陣乘法

}return tmp;

}martix expo(martix x ,int k)//矩陣的冪

while(k)

return tmp;

}martix add(martix a , martix b)//矩陣加法

martix sum( martix x, int k)

else

}int main()

}return

0;}

POJ 3233 矩陣快速冪 二分

題意 給你乙個n n的矩陣 讓你求s 思路 只知道矩陣快速冪 然後nlogn遞推是會tle的。所以呢 要把那個n換成log 那這個怎麼搞呢 二分!當k為偶數時 當k為奇數時 就按照這麼搞就能搞出來了 我是看的題解才a的,中間亂搞的時候犯了一些腦殘的錯誤 by siriusren include in...

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