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

2022-03-14 22:28:03 字數 1260 閱讀 4782

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*10^7;

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

\(\displaystyle \beginl}}

\ 現在我需要求的矩陣是:\\

\begin

f[ i]\\

f[ i-1]\\

f[ i-2]

\end\\

根據題目中給出的條件:f[ x] =f[ x-1] +f[ x-3]\\

而我們下一步要求出f[ i+1]\\

所以f[ i+1] =f[ i] +f[ i-2]\\

所以求初始矩陣為\\

\begin

1 & 0 & 1\\

1 & 0 & 0\\

0 & 1 & 0

\end\\

對初始矩陣進行矩陣快速冪然後輸出a[ 1][ 1]

\end\)

#include #include #include #include #include #include #define re register

#define max 200000012

#define int long long

int n;

const int mod=1000000007;

struct mat

inline void build()

};mat operator*(mat &a,mat &b)

mat ans,a,a;

void quick_mat(int x)

}signed main()

a.a[1][1]=1;a.a[1][2]=0;a.a[1][3]=1;

a.a[2][1]=1;a.a[2][2]=0;a.a[2][3]=0;

a.a[3][1]=0;a.a[3][2]=1;a.a[3][3]=0;

quick_mat(x-3);

ans = ans * a;

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

} 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 4 919 對於...

洛谷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...