題目描述
乙個由自然數組成的數列按下式定義:
對於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...