nyoj 301遞推求值 矩陣快速冪的遞推求值

2021-07-26 21:43:12 字數 1185 閱讀 2888

時間限制:

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取模後的值

樣例輸入

2

1 1 1 1 0 5

1 1 -1 -10 -100 3

樣例輸出

5

999896

分析:由於n的值比較大,所以常規方法肯定會超時。根據遞推式求第n個表示式的值時,通常用矩陣乘法來做。

本題要構造兩個矩陣,a  f2  0  0    b  b  a  c

f1  0  0       1  0  1

1   0  0       0  0  1

因為f2

和f1是已知的,當n>=3時,每次都乘以矩陣b,就能推出下乙個矩陣。而矩陣的第一行第一列的元素就是所求的結果。

因為有負數的存在,這是需要加上mod再取餘。

#include#include#include#define mod 1000007

#define ll long long

using namespace std;

struct matric

;ll f1,f2,a,b,c,n;

matric unit =

;matric quick2(matric q,matric p)

}} return c;

}matric quick1()

p=quick2(p,b);

return p;

}int main()

else if(n==2)

else

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

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