P1939 模板 矩陣加速(數列)

2021-09-26 05:18:33 字數 710 閱讀 6299

題目描述

a[1]=a[2]=a[3]=1

a[x]=a[x-3]+a[x-1] (x>3)

求a數列的第n項對1000000007(10^9+7)取餘的值。

輸入格式

第一行乙個整數t,表示詢問個數。

以下t行,每行乙個正整數n。

輸出格式

每行輸出乙個非負整數表示答案。

輸入輸出樣例

輸入 #1 複製36

810輸出 #1 複製49

19說明/提示

對於30%的資料 n<=100;

對於60%的資料 n<=2*10^7;

對於100%的資料 t<=100,n<=2*10^9;

思路:矩陣快速冪+構造矩陣函式

#include #include typedef long long ll;

const ll mod = 1e+9+7;

typedef struct nodematrix;

ll n;

matrix c,b;

void init()

}matrix matrix(matrix a,matrix b)

} }return c;

}int main()

printf("%lld\n",ans.mat[1][3]);

} return 0;

}

P1939 模板 矩陣加速(數列)

a 1 a 2 a 3 1 a x a x 3 a x 1 x 3 求a數列的第n項對1000000007 10 9 7 取餘的值。輸入格式 第一行乙個整數t,表示詢問個數。以下t行,每行乙個正整數n。輸出格式 每行輸出乙個非負整數表示答案。輸入樣例 1 368 10輸出樣例 1 4919 對於30...

P1939 模板 矩陣加速(數列)

已知乙個數列 aa,它滿足 a x begin 1 x in a a x geq 4 endax x 4 求 aa 數列的第 nn 項對 10 9 7109 7 取餘的值。第一行乙個整數 tt,表示詢問個數。以下 tt 行,每行乙個正整數 nn。每行輸出乙個非負整數表示答案。includeusing...

P1939 矩陣加速(數列)

這個題若不看題目和範圍,我首先想到用遞推,不過 n 2 10 9,若用遞推,一定會超時。要用矩陣加速的話首先要找到乙個矩陣 不唯一 用來相乘 a1,a2,a3 是乙個1 3的矩陣,我想把它轉化為 a2,a3,a4 也是乙個1 3的矩陣,所以要找的矩陣肯定是3 3的 可以假設這個3 3的矩陣為 所以 ...