Codevs 3332 數列 矩陣乘法

2021-07-22 15:51:55 字數 1333 閱讀 1000

3332 數列

時間限制: 1 s

空間限制: 256000 kb

題目等級 :大師 master

題目描述 description

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

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

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

輸入描述 input description

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

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

輸出描述 output description

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

樣例輸入 sample input

3 6

8 10

樣例輸出 sample output

4 9

19 資料範圍及提示 data size & hint

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

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

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

分類標籤 tags

快速冪 矩陣乘法 數論

/*

矩陣乘法快速冪.

關鍵在於推矩陣.

這個題矩陣還是比較好推的.

然後很快就a了......

*/#include

#include

#include

#define mod 1000000007

#define maxn 4

#define ll long long

using

namespace

std;

ll b[maxn][maxn],a[maxn][maxn],ans[maxn][maxn],c[maxn][maxn];

void mi(int n)

for(int i=1;i<=3;i++)

for(int j=1;j<=3;j++)

for(int k=1;k<=3;k++)

c[i][j]=(c[i][j]+b[i][k]*b[k][j]%mod)%mod;

for(int i=1;i<=3;i++)

for(int j=1;j<=3;j++)

b[i][j]=c[i][j],c[i][j]=0;

n>>=1;

}}void slove(int n)

int main()

return

0;}

codevs等差數列

題目描述 description 給定n 1 n 100 個數,從中找出盡可能多的數使得他們能夠組成乙個等差數列.求最長的等差數列的長度.輸入描述 input description 第一行是乙個整數n,接下來一行包括了n個數,每個數的絕對值不超過10000000.輸出描述 output descr...

codevs 等差數列

時間限制 1 s 空間限制 128000 kb 題目等級 gold 題解給定n 1 n 100 個數,從中找出盡可能多的數使得他們能夠組成乙個等差數列.求最長的等差數列的長度.輸入描述 input description 第一行是乙個整數n,接下來一行包括了n個數,每個數的絕對值不超過1000000...

Codevs 4357 不等數列

不等數列 題目描述 將1到n任意排列,然後在排列的每兩個數之間根據他們的大小關係插入 和 輸入格式 第一行2個整數n,k。輸出格式 乙個整數表示答案。樣例輸入 5 2 樣例輸出 資料範圍 對於30 的資料 n 10 對於100 的資料 k n 1000,對於30 n 10的資料,搜尋打表,狀態壓縮動...