3231: [Sdoi2008]递归数列 Time Limit: 1 Sec Memory Limit: 256 MB Submit: 841 Solved: 378 [Submit][Status][Discuss] Description 一个由自然数组成的数列按下式定义: 对于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的余数的值。 Input 由四行组成。 第一行是一个自然数k。 第二行包含k个自然数b1, b2,...,bk。 第三行包含k个自然数c1, c2,...,ck。 第四行包含三个自然数m, n, p。 Output 仅包含一行:一个正整数,表示(am + am+1 + am+2 + ... + an) mod p的值。 Sample Input 2 1 1 1 1 2 10 1000003 Sample Output 142 HINT 对于100%的测试数据: 1<= k<=15 1 <= m <= n <= 1018
不要看错了,最后一点是10的18次方,不是1018
被坑了,QAQ
没看错题应该就没有什么问题了吧,矩乘求一下前n项的和
最后输出sum[n]-sum[m-1]即可
矩阵的构造
ans答案矩阵
【sum,f[n-1],f[n-2],f[n-3]........f[n-k]】
转移矩阵
1 c[1] c[2] c[3] ..... c[k-1] c[k]
0 c[1] c[2] c[3] ..... c[k-1] c[k]
0 1 0 0 0 ....... 0 0
0 0 1 0 0 ....... 0 0
0 0 0 1 0 ....... 0 0
0 0 0 0 1 ...... 0 0
0 0 0 0 0 1....0 0
0 0 0 0 0 0 1 0
这个矩阵的长和宽都是k+1
所以最终的复杂度为O((k+1)^3*(longn+logm))