洛谷P1939 模板 矩陣加速(數列)

2022-03-01 06:43:20 字數 1045 閱讀 4663

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:

4

919

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

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

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

#include#include

#include

#include

using

namespace

std;

typedef

long

long

ll;const

int mod=1e9+7

;inline ll read()

while(ch>='

0'&&ch<='9')

return x*f;

}struct

mata,b;

inline mat matmul(mat x,mat y)

returnt;}

inline mat matpow(mat x,

intp)

return

res;

}int

main()

mat tmp=matpow(a,n-3-1

); tmp=matmul(tmp,b);

printf(

"%lld\n

",tmp.m[1][1

]); }

return0;

}

洛谷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。每行輸出乙個非負整數表示答案。36 81049 19對於30 的資料 n 100 對於60 的資料 n 2 ...

洛谷P1939 模板 矩陣加速(數列)

傳送門 a 1 a 2 a 3 1 a n a a quad n 3 有 t 組詢問。對每組詢問,給定 n 求 a n mod 1000000007 t leq 100,n leq 2 times 10 9 首先假定你會矩陣快速冪 不會的看 這裡 那麼,我們可以構造列向量 c begina a a ...

洛谷P1939 模板 矩陣加速(數列)

設f1 f2 f3 1 fn fn 3 fn 1f1 f2 f3 1,f n f n 3 fn 1 求fnfn 這篇部落格並不是專門來介紹矩陣乘法加速遞推的。但是既然是模板題就提一下吧。也就是說,對於兩個矩陣aa和b b,在滿足第乙個矩陣的列數 第二個矩陣的行數時,這兩個矩陣就可以相乘。那麼假設aa...