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 20using 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 並輸出它除以給...