題意:
資料範圍:
each test case contains 7 integers, they are f1, f2, a, b, k, n, m which were just mentioned above, where 0 < f1, f2, a, b, n, m < 1000 000 000, and 0 ≤ k < 50.
題解:對於這種k次方,而且累加求和的一般都是矩陣快速冪,只要是構造矩陣比較麻煩。
看乙個大神的題解(侵刪):
本題要二項式展開,別怕麻煩。
方法和以前的矩陣推法一樣,就是矩陣是變化的,根據資料而變化。
先自己寫下,感覺紙寫不下時,就別寫了!
設k=3;自己展開算一下:
右邊的展開: 就是用f(n)=af(n-1)+bf(n-2) 把f(n)都換成 f(n-1)f(n-2)的表示式,最後根據表示式把上面左邊的矩陣求出。驚奇的發現很有規律,是個下三角矩陣,和k有直接的關係。
是k+2的方陣。設該方陣為a,則 (a*f). a11=s(2);所以只要計算 n-1次,就能算出s(n)了。
注意:s(1)不等於f1, s(1)=f1^k,我在這裡wa 了20次,低階錯誤!
所以當k>3時,矩陣也推出來了。
就是二項式的展開作為係數的下三角矩陣。
如何解決矩陣的大小不固定問題:
想了很多,想用類,或用指標,走了彎路!
突然想到,初始化開1個很大的2維陣列,然後每次矩陣乘法時根據每組資料的矩陣的維數來計算就行了,實際執行時正確的,測試很多回了,基本沒改動模板,看**就懂了。
#include #include #include #define ll long long
using namespace std;
const int maxn=50;
ll mod,k,k;
struct mat
res,a;
ll c[maxn+10][maxn+10];
ll line[maxn+10];
void get_c()
}ll _pow(ll x,ll y)
return ans;
}mat mul(mat a,mat b)
ll ans=0;
for(ll i=0; i
C 數獨遊戲(一) 構造數獨矩陣
其實一直都很想寫個數獨的遊戲,最近剛好看了 程式設計之美 得到了一些啟發。好,這時第一節,構造數獨矩陣。主要用到深度搜尋演算法,先往下乙個格仔填數字 依次填入1 9 在9 9 的行中檢驗數字有沒有出現過,在9 9 的列中檢驗數字有沒有出現過,最後在3 3的 中檢驗數字是否出現過。如果最後1 9中所有...
二維陣列隨機數列印矩陣
矩陣為 5 行 5 列,該矩陣是由程式隨機產生的 10 以內數字排列而成。下面使用二維陣列來建立該矩陣 public static void test2 普通for迴圈遍歷二維陣列 system.out.println 普通for迴圈遍歷二維陣列 for int i 0 i shuzu.length...
c 矩陣出現奇怪的數 用矩陣來處理資料 降維打擊
同四維跌落到三維一樣,三維空間也會向二維空間跌落,由乙個維度蜷縮到微觀中。那一小片二維空間的面積 它只有面積 會迅速擴大,這又引發了更大規模的跌落 我們現在就處在向二維跌落的空間中,最終,整個太陽系將跌落到二維,也就是說,太陽系將變成一副厚度為零的畫。維度上面引用了三體的一段話,想 一下維度的事情。...