BZOJ3231 Sdoi2008 遞迴數列

2022-03-29 17:58:04 字數 2014 閱讀 8740

bzoj3231: [sdoi2008]遞迴數列

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

對於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的餘數的值。

由四行組成。

第一行是乙個自然數k。

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

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

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

僅包含一行:乙個正整數,表示(am

+ am+1

+ am+2

+ ... + an

) mod p的值。

21 1

1 12 10 1000003

142對於100%的測試資料:

1<= k<=15

1 <= m <= n <= 1018

題解here!

矩陣快速冪的沙茶題。

設$ans(l,r)=\sum_^ra_i$。

差一下分:$ans(l,r)=ans(1,r)-ans(1,l-1)$

這種題只要構造出矩陣就萬事大吉了。

我們很容易想到把$a_1,a_2,a_3,...,a_k$全部放到矩陣中。

但是求和怎麼辦?

沒事,一併放到矩陣中。

設$sum(x)=\sum_^xa_i$。

有這個式子:$$sum(x+1)=sum(x)+a_=sum(x)+c_1\times a_+c_2\times a_+...+c_k\times a_$$

所以我們構造出矩陣長這個樣:$$\left[\begin{}0&0&0&...&0&c_k&c_k\\1&0&0&...&0&c_&c_\\0&1&0&...&0&c_&c_\\0&0&1&...&0&c_&c_\\&&&......\\0&0&0&...&1&c_1&c_1\\0&0&0&...&0&0&1\end\right]$$

最初的矩陣就是這樣:$$\left[\begin{}a_1&a_2&a_3&...&a_k&sum(k)\end\right]$$

而$a_i=b_i,i\in [1,k]$。

然後就可以愉快地跑矩陣快速冪了。

附**:

#include#include#include#define maxn 20

using namespace std;

long long n,m,p,k;

long long b[maxn],c[maxn],sum[maxn];

struct node

friend node operator *(node x,node y)

} return ret;

} friend node operator ^(node x,long long w)

return s;

}}a[3];

inline long long read()

while(c>='0'&&c<='9')

return date*w;

}long long solve(long long x,int id)

void work()

void init()

for(int i=1;i<=k;i++)c[i]=read();

m=read();n=read();p=read();

a[1].val[k+1][k+1]=a[2].val[k+1][k+1]=1;

for(int i=1;ifor(int i=1;i<=k;i++)a[1].val[i][k]=a[1].val[i][k+1]=a[2].val[i][k]=a[2].val[i][k+1]=c[k-i+1];

}int main()

bzoj 3231 SDOI2008 遞迴數列

乙個由自然數組成的數列按下式定義 對於i k a i b i 對於i k a i c 1 a i 1 c 2 a i 2 c k a i k 其中b j 和 c j 1 j k 是給定的自然數。寫乙個程式,給定自然數m n,計算a m a m 1 a m 2 a n 並輸出它除以給定自然數p的餘數的...

BZOJ 3231 Sdoi2008 遞迴數列

bzoj 3231 sdoi2008 遞迴數列 矩陣乘法 乙個由自然數組成的數列按下式定義 對於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 並輸出它除以...

BZOJ3231 矩陣連乘,稍有點複雜

題目 3231 sdoi2008 遞迴數列 題意 乙個由自然數組成的數列按下式定義 對於 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 並輸出它除以給...