f(n) = a1f(n − 1) + a2f(n − 2) + a3f(n − 3) + . . . + adf(n − d), for n > d,

可以用矩阵进行优化,直接构造矩阵,然后快速幂即可。

#include<map>
#include<set>
#include<string>
#include<queue>
#include<stack>
#include<cmath>
#include<vector>
#include<cstdio>
#include<time.h>
#include<cstring>
#include<iostream>
#include<algorithm>
#define INF 1000000001
#define ll long long
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
const int MAXN = ;
struct Mat
{
ll a[MAXN][MAXN];
void Init(){
memset(a,,sizeof(a));
for(int i = ; i < ; i++){
a[i][i] = ;
}
}
};
ll fa[MAXN],d[MAXN];
ll n,k,MOD;
Mat a;
void Init()
{
memset(a.a,,sizeof(a.a));
for(int i = ; i < n-; i++){
a.a[i][i+] = ;
}
for(int i = ; i < n; i++){
a.a[n-][i] = fa[n - i - ];
}
}
Mat Matadd(Mat a,Mat b)
{
Mat c;
for(int i = ; i < n; i++){
for(int j = ; j < n; j++){
c.a[i][j] = (a.a[i][j] + b.a[i][j])%MOD;
}
}
return c;
}
Mat Matmul(Mat a,Mat b)
{
Mat c;
for(int i = ; i < n; i++){
for(int j = ; j < n; j++){
c.a[i][j] = ;
for(int k = ; k < n; k++){
c.a[i][j] += (a.a[i][k] * b.a[k][j])%MOD;
}
c.a[i][j] %= MOD;
}
}
return c;
}
Mat power(Mat a,ll n)
{
Mat c;
c.Init();
while(n){
if(n & ){
c = Matmul(c,a);
}
a = Matmul(a,a);
n >>= ;
}
return c;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("data","r",stdin);
#endif
while(~scanf("%lld%lld%lld",&n,&k,&MOD)){
if(!n && !k && !MOD)break;
for(int i = ; i < n; i++){
scanf("%lld",&fa[i]);
fa[i] %= MOD;
}
for(int i = ; i < n; i++){
scanf("%lld",&d[i]);
d[i] %= MOD;
}
Init(); a = power(a,k-);
ll ans = ;
for(int i = ; i < n; i++){
ans += a.a[][i] * d[i] % MOD;
ans %= MOD;
}
printf("%lld\n",ans);
}
return ;
}

最新文章

  1. LeetCode:Max Points on a Line
  2. gedit 没有preference项,使preference回归,并用命令行设置行号,text wrapping等
  3. frame与frame之间怎么用jquery传值
  4. PHP限制提现时间-----周一至周五 9点到17点
  5. tomcat对请求路径的匹配过程(原创)
  6. POJ3111 K Best
  7. webpack + vue 在dev和production模式下的小小区别
  8. day11-(cookie&amp;&amp;session)
  9. jmeter中split分隔字符
  10. element-ui 带单选框的表格
  11. 《剑指offer》— JavaScript(33)丑数
  12. Android -- 混淆
  13. keras做DNN
  14. mongodb中Gson和java##Bean对象转化类
  15. UML总结--总体架构
  16. Maven的pom文件配置
  17. 补充的css知识点
  18. HDU 2053 Switch Game(开灯问题,完全平方数)
  19. [docker]存储驱动overlay和overlay2的区别
  20. 『ACM C++』 Codeforces | 1066A - Points in Segments

热门文章

  1. 转:Configure your eclipse for C++
  2. Js实现简单的省市级联的效果
  3. AngularJs 时间格式化处理
  4. webclient 比浏览器加载页面慢的一个问题
  5. consumer group
  6. 永远不要修改arguments对象
  7. 手把手教你使用markdown
  8. Linux学期总结
  9. Openwrt Image Builder/SDK 初探
  10. 闲扯 『 document.write 』