luogu2461遞迴數列

2022-09-08 00:09:19 字數 1710 閱讀 3891

題目描述

乙個由自然數組成的數列按下式定義:

對於i <= k:ai = bi

對於i > k: ai = c1ai-1 + c2ai-2 + … + ckai-k

其中bj 和 cj (1<=j<=k)是給定的自然數。寫乙個程式,給定自然數m <= n, 計算am + am+1 + am+2 + … + an, 並輸出它除以給定自然數p的餘數的值。

輸入輸出格式

輸入格式:

輸入檔案spp.in由四行組成。

第一行是乙個自然數k。

第二行包含k個自然數b1, b2,…,bk。

第三行包含k個自然數c1, c2,…,ck。

第四行包含三個自然數m, n, p。

輸出格式:

輸出檔案spp.out僅包含一行:乙個正整數,表示(am + am+1 + am+2 + … + an) mod p的值。

輸入輸出樣例

輸入樣例#1:

2 1 1

1 1

2 10 1000003

輸出樣例#1:

142說明

對於100%的測試資料:

1<= k <=15

1 <= m <= n <= 1018

對於20%的測試資料:

1<= k <=15

1 <= m <= n <= 106

對於30%的測試資料:

k=1 1 <= m <= n <= 1018

對於所有測試資料:

這裡寫**片

#include

#include

#include

#define ll long long

using

namespace

std;

const

int n=20;

int k;

ll n,mm,mod;

ll b[n],c[n];

ll tot=0;

struct node

return ans; ///

}void clear()

ll ksm(ll pp)

p=pp-k; //真心。。對樣例調一調就好了

node ans=(*this),a=(*this);

while (p)

ll r=0;

for (int i=1;i//計算字首和

r=(r+(tot*ans.m[k][k])%mod)%mod;

return r; //sum

}};int main()

for (int i=1;i1]=1,t.m[i][i+1]=1;

m.m[k+1][k+1]=1;

t.m[k+1][k+1]=1;

k++;

ll an=0;

an+=m.ksm(n);

an-=t.ksm(mm-1);

printf("%lld",(an+mod)%mod); //題目有漏洞,在最後的%處理時要先+mod再%

return

0;}

P2461 SDOI2008 遞迴數列

p2461 sdoi2008 遞迴數列 紀念不看題解 a 掉的第乙個矩陣快速冪 先做完模板題吧p1939 矩陣開 k 1 2 定義函式 f x 為 sum limits xa i 顯然 f x f a i a a a f longrightarrow a i,a a f i 提示到此結束了,仔細想想...

luogu 數列找不同 莫隊

了解過莫隊的人應該都清楚,莫隊是乙個優化的暴力,可以在相對暴力比較優的時間中,求出一段序列內的某些性質 例 數字的種類 那麼這道題就明顯是一道模板題了,在l,r 左右段點 移動的過程中,記錄數字的種類,若種類數等於r l 1,那麼表明沒有重複。include include include incl...

Luogu1939 模板 矩陣加速(數列)

題目描述 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 3 6...