時間限制:
1000 ms | 記憶體限制:
65535 kb
難度:4 描述
給你乙個遞推公式:
f(x)=a*f(x-2)+b*f(x-1)+c
並給你f(1),f(2)的值,請求出f(n)的值,由於f(n)的值可能過大,求出f(n)對1000007取模後的值。
注意:-1對3取模後等於2
輸入
第一行是乙個整數t,表示測試資料的組數(t<=10000)
隨後每行有六個整數,分別表示f(1),f(2),a,b,c,n的值。
其中0<=f(1),f(2)<100,-100<=a,b,c<=100,1<=n<=100000000 (10^9)
輸出輸出f(n)對1000007取模後的值
樣例輸入
21 1 1 1 0 5
1 1 -1 -10 -100 3
樣例輸出
5999896
分析:由於n的值比較大,所以常規方法肯定會超時。根據遞推式求第n個表示式的值時,通常用矩陣乘法來做。
本題要構造兩個矩陣,其中乙個為矩陣a,作為初始矩陣
f2 0 0
f1 0 0
1 0 0
另乙個為矩陣b
b a c
1 0 0
0 0 1
因為f(2)和f(1)是已知的,當n>=3時,每次都乘以矩陣b,就能推出下乙個矩陣。而矩陣的第一行第一列的元素就是所求的結果。
所以利用矩陣快速冪能夠快速準確地求出結果。
#include#include#define mod 1000007
#define n 3
typedef long long ll;
struct matrix
;matrix unit_matrix =
; //單位矩陣
matrix mul(matrix a, matrix b) //矩陣相乘
}return res;
}matrix pow_matrix(matrix a, ll n) //矩陣快速冪
return res;
}int main()
}return 0;
}
NYOJ 301 遞推求值 矩陣快速冪
時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 給你乙個遞推公式 f x a f x 2 b f x 1 c 並給你f 1 f 2 的值,請求出f n 的值,由於f n 的值可能過大,求出f n 對1000007取模後的值。注意 1對3取模後等於2 輸入 第一行是乙個整數t,...
矩陣快速冪 nyoj301 遞推求值
時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 給你乙個遞推公式 f x a f x 2 b f x 1 c 並給你f 1 f 2 的值,請求出f n 的值,由於f n 的值可能過大,求出f n 對1000007取模後的值。注意 1對3取模後等於2 輸入 第一行是乙個整數t,...
NYOJ301 遞推求值 矩陣快速冪
題目 時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 給你乙個遞推公式 f x a f x 2 b f x 1 c 並給你f 1 f 2 的值,請求出f n 的值,由於f n 的值可能過大,求出f n 對1000007取模後的值。注意 1對3取模後等於2 輸入 第一行是乙個整...