這個有個難點,就是他那個是到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...