NYOJ301 遞推求值 矩陣快速冪

2021-07-30 11:26:19 字數 1832 閱讀 5206

題目:

時間限制:

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

**經典題目

上傳者張云聰

這是一道矩陣快速冪的入門加模板題

矩陣快速冪:

1:思想

矩陣快速冪的思想就是跟數的快速冪一樣,假如我們要求2^11,次方,我們可以把 11 寫成 1+2+8 ,也就是2^0 + 2^1 + 2^3 。那麼把乙個o(n)的時間複雜度降到了log(n)

矩陣快速冪的思想和數的快速冪是一模一樣的,就是要自己實現矩陣的乘法,然後可以套數的快速冪的模板。

2:難點

矩陣題目的難點在於構造矩陣,一般用於有能夠推出遞推式的題目,推出遞推式之後,發現遞推o(n)的複雜度時間比較大,那麼我們可以構造乙個矩陣,然後用矩陣快速冪降低到log(n)的時間複雜度

**:

#include #include #include #include #include #include #include #include #include #include #include #define mem(a,b) memset(a,b,sizeof(a))

#define inf 0x3f3f3f3f

#define mod 1000007

#define n 3

#define m 1000000+10

#define ll long long

using namespace std;

struct matrix

;matrix unit_matrix=

;//單位矩陣

matrix mul(matrix a,matrix b)//矩陣相乘

return res;

}int main()

}return 0;

}

2017/10/10重做**:

#include#include#include#include#include#include#include#include#include#define mem(a,b) memset(a,b,sizeof(a))

#define inf 0x3f3f3f3f

#define mod 1000007

#define debug() puts("what the ****!!!")

#define ll long long

using namespace std;

const ll n=3;

struct matrix

void init()

return ans;

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

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