题意:

      给以个递推f(n) = a1 f(n - 1) + a2 f(n - 2) + a3 f(n - 3) + ... + ad f(n - d), for n > d.,给你n,d,a1,a2..ad ,f[1],f[2]..f[d],让你求f[n]%m.

思路:

      比较基础的矩阵题目,每次都构造一个d*d的矩阵,然后用快速幂求出来它的n-1次幂,然后在求出乘积就行了,简单构造,没有什么坑点。

          

#include<stdio.h>

#include<string.h>

typedef struct

{

   long long Mat[16][16];

}MAT;

long long n ,MOD ,d;

MAT mm(MAT a ,MAT b)

{

   MAT c;

   memset(c.Mat ,0 ,sizeof(c.Mat));

   for(int i = 1 ;i <= d ;i ++)

   for(int j = 1 ;j <= d ;j ++)

   for(int k = 1 ;k <= d ;k ++)

   c.Mat[i][j] = (c.Mat[i][j] + a.Mat[i][k] * b.Mat[k][j])%MOD;

   return c;

}

MAT Quick(MAT a ,long long b)

{

   MAT c;

   memset(c.Mat ,0 ,sizeof(c.Mat));

   for(int i = 1 ;i <= d ;i ++)

   c.Mat[i][i] = 1;

   while(b)

   {

      if(b&1) c = mm(c ,a);

      a = mm(a ,a);

      b>>=1;

   }

   return c;

}

int main ()

{

   long long D[16] ,F[16] ,i;

   MAT A;

   while(~scanf("%lld %lld %lld" ,&d ,&n ,&MOD) && d + n + MOD)

   {

      for(i = 1 ;i <= d ;i ++) 

      {

         scanf("%lld" ,&D[i]);

         D[i] %= MOD;

      }

      for(i = 1 ;i <= d ;i ++) 

      {

         scanf("%lld" ,&F[i]);

         F[i] %= MOD;

      }

      if(n <= d)

      {

         printf("%lld\n" ,F[n]);

         continue;

      }

      memset(A.Mat ,0 ,sizeof(A.Mat));

      int x = 2 ,y = 1;

      for(i = 2 ;i <= d ;i ++)

      {

         A.Mat[x][y] = 1;

         x ++ ,y ++;

      }

      for(i = 1 ;i <= d ;i ++)

      A.Mat[i][d] = D[d-i+1];

      

      

      A = Quick(A ,n - 1);

      long long Ans = 0;

      for(i = 1 ;i <= d ;i ++)

      {

         Ans += F[i] * A.Mat[i][1];

         Ans %= MOD;

      }

      printf("%lld\n" ,Ans);

   }

   return 0;

}

      

      

      

      

      

      

      

      

   

   

   

   

UVA10870递推关系(矩阵乘法)的更多相关文章

  1. POJ3070 Fibonacci[矩阵乘法]

    Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13677   Accepted: 9697 Descri ...

  2. 学习心得:《十个利用矩阵乘法解决的经典题目》from Matrix67

    本文来自:http://www.matrix67.com/blog/archives/tag/poj大牛的博文学习学习 节选如下部分:矩阵乘法的两个重要性质:一,矩阵乘法不满足交换律:二,矩阵乘法满足 ...

  3. 【转】Matrix67:十个利用矩阵乘法解决的经典题目

    好像目前还没有这方面题目的总结.这几天连续看到四个问这类题目的人,今天在这里简单写一下.这里我们不介绍其它有关矩阵的知识,只介绍矩阵乘法和相关性质.    不要以为数学中的矩阵也是黑色屏幕上不断变化的 ...

  4. CF781D Axel and Marston in Bitland [倍增 矩阵乘法 bitset]

    Axel and Marston in Bitland 好开心第一次补$F$题虽然是$Div.2$ 题意: 一个有向图,每条边是$0$或$1$,要求按如下规则构造一个序列然后走: 第一个是$0$,每次 ...

  5. 矩阵乘法code

    VOJ1067 我们可以用上面的方法二分求出任何一个线性递推式的第n项,其对应矩阵的构造方法为:在右上角的(n-1)*(n-1)的小矩阵中的主对角线上填1,矩阵第n行填对应的系数,其它地方都填0.例如 ...

  6. POJ3070 Fibonacci[矩阵乘法]【学习笔记】

    Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13677   Accepted: 9697 Descri ...

  7. [矩阵乘法]裴波拉契数列III

    [ 矩 阵 乘 法 ] 裴 波 拉 契 数 列 I I I [矩阵乘法]裴波拉契数列III [矩阵乘法]裴波拉契数列III Description 求数列f[n]=f[n-1]+f[n-2]+1的第N ...

  8. [矩阵乘法]裴波拉契数列II

    [ 矩 阵 乘 法 ] 裴 波 拉 契 数 列 I I [矩阵乘法]裴波拉契数列II [矩阵乘法]裴波拉契数列II Description 形如 1 1 2 3 5 8 13 21 34 55 89 ...

  9. *HDU2254 矩阵乘法

    奥运 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submissi ...

  10. *HDU 1757 矩阵乘法

    A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

随机推荐

  1. Java程序员必备后台前端框架--Layui【从入门到实战】(一)

    layui入门使用及图标的使用 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] [编程工具:IDEA] 下载Layui与文件分析 下载直接去官网下载即可 文件分析 下载完成后,解压会 ...

  2. 靶场练习-Sqli-labs通关记录(1-4关)

                              0x00 实验环境 本地:Win 10 靶场:sqli-labs(共65关,每日一关) 0x02 通关记录 简介:一天一关! (1)第一关: 简单的 ...

  3. 漏洞复现-CVE-2018-8715-Appweb

          0x00 实验环境 攻击机:Win 10 0x01 影响版本 嵌入式HTTP Web服务器,<7.0.3版本 0x02 漏洞复现 (1)实验环境: 打开后出现此弹框登录界面: (2) ...

  4. 锐捷RG-UAC统一上网行为管理审计系统账号密码泄露漏洞 CNVD-2021-14536

    一:产品介绍: 锐捷 RG-UAC 统一上网行为管理审计系统 锐捷统一上网行为管理与审计RG-UAC系列是星网锐捷网络有限公司自主研发的上网行为管理与审计产品,以路由.透明.旁路或混合模式部署在网络的 ...

  5. C# 应用 - 封装类访问 Oracle 数据库

    1. 引入库类 Oracle.ManagedDataAccess.dll using Oracle.ManagedDataAccess.Client; 2. 粗暴封装 namespace xx { p ...

  6. python学习之基础内容

    python基础内容① 什么是python? -一种计算机语言,计算机语言分为 -高级语言:python.java.Ruby.C#.C++...... -基础语言:C语言.汇编 -计算机可以直接执行基 ...

  7. 【H264】视频编码发展简史

    一.常见视频编码格式 编码格式有很多,如下图: 目前比较常用的编码有: H26x系列:由ITU(国际电传视讯联盟)主导,侧重网络传输 MPEG系列:由ISO(国际标准组织机构)下属的MPEG(运动图象 ...

  8. Banner信息扫描

    Banner信息扫描 Banner一般用于表示对用户的欢迎,但其中可能包含敏感信息.获取Banner也属于信息搜索的范畴.在渗透测试中,典型的4xx.5xx信息泄露就属于Banner泄露的一种.在Ba ...

  9. Linux入门视频笔记三(常用工具集)

    一.全局变量(Linux中的全局变量指在整个系统中都能用的变量) 1.USER:当前登录系统的用户的用户名 2.HOME:当前用户的主目录 cd $HOME 或 cd ~可以进入用户主目录 3.PAT ...

  10. ch1_6_2求解删除公共字符问题

    输入两个字符串,从第一字符串中删除第二个字符串中所有的字符.例如,输入"They are students."和"aeiou",则删除之后的第一个字符串变成&q ...