A Simple Math Problem

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1838    Accepted Submission(s): 1053

Problem Description
Lele now is thinking about a simple function f(x).

If x < 10 f(x) = x.
If x >= 10 f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + …… + a9 * f(x-10);
And ai(0<=i<=9) can only be 0 or 1 .

Now, I will give a0 ~ a9 and two positive integers k and m ,and could you help Lele to caculate f(k)%m.

 
Input
The problem contains mutiple test cases.Please process to the end of file.
In each case, there will be two lines.
In the first line , there are two positive integers k and m. ( k<2*10^9 , m < 10^5 )
In the second line , there are ten integers represent a0 ~ a9.
 
Output
For each case, output f(k) % m in one line.
 
Sample Input
10 9999
1 1 1 1 1 1 1 1 1 1
20 500
1 0 1 0 1 0 1 0 1 0
 
Sample Output
45
104
 
Author
linle
 
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #include<cstring>
  5. using namespace std;
  6.  
  7. const int N= ;
  8.  
  9. struct node
  10. {
  11. __int64 mat[N][N];
  12. }hxl;
  13. int A[],k,m;
  14.  
  15. void make_first(node *cur)
  16. {
  17. int i,j;
  18. for(i=;i<=;i++)
  19. for(j=;j<=;j++)
  20. if(i==j)
  21. cur->mat[i][j]=;
  22. else cur->mat[i][j]=;
  23. }
  24.  
  25. struct node cheng(node cur,node now)
  26. {
  27. node ww;
  28. int i,j,k;
  29. memset(ww.mat,,sizeof(ww.mat));
  30. for(i=;i<=;i++)
  31. for(k=;k<=;k++)
  32. if(cur.mat[i][k])
  33. {
  34. for(j=;j<=;j++)
  35. if(now.mat[k][j])
  36. {
  37. ww.mat[i][j]+=cur.mat[i][k]*now.mat[k][j];
  38. if(ww.mat[i][j]>=m)
  39. ww.mat[i][j]%=m;
  40. }
  41. }
  42. return ww;
  43. }
  44.  
  45. void power_sum2(int n)
  46. {
  47. __int64 sum=;
  48. int i;
  49. node cur,now=hxl;
  50. make_first(&cur);
  51. while(n)
  52. {
  53. if(n&)
  54. {
  55. cur=cheng(cur,now);
  56. }
  57. n=n>>;
  58. now=cheng(now,now);
  59. }
  60. for(i=;i<=;i++)
  61. sum= (sum+(-i)*cur.mat[][i])%m;
  62. printf("%I64d\n",sum);
  63.  
  64. }
  65.  
  66. void make_ini()
  67. {
  68. int i,j;
  69. if(k<=)
  70. {
  71. printf("%d\n",k);
  72. return;
  73. }
  74. memset(hxl.mat,,sizeof(hxl.mat));
  75. for(i=;i<=;i++)
  76. hxl.mat[][i]=A[i];
  77.  
  78. for(i=;i<=;i++)// 初始化
  79. for(j=;j<=;j++)
  80. if(i-j==)
  81. hxl.mat[i][j]=;
  82.  
  83. power_sum2(k-);
  84. }
  85.  
  86. int main()
  87. {
  88. int i;
  89. while(scanf("%d%d",&k,&m)>)
  90. {
  91. for(i=;i<=;i++)
  92. scanf("%d",&A[i]);
  93. make_ini();
  94. // cs();
  95. }
  96. return ;
  97. }
Source
 
Recommend
lcy
 
 

HDU 1757 矩阵求第n的递推式的更多相关文章

  1. 矩阵乘法&矩阵快速幂&矩阵快速幂解决线性递推式

    矩阵乘法,顾名思义矩阵与矩阵相乘, 两矩阵可相乘的前提:第一个矩阵的行与第二个矩阵的列相等 相乘原则: a b     *     A B   =   a*A+b*C  a*c+b*D c d     ...

  2. HDU 3802 矩阵快速幂 化简递推式子 加一点点二次剩余知识

    求$G(a,b,n,p) = (a^{\frac {p-1}{2}}+1)(b^{\frac{p-1}{2}}+1)[(\sqrt{a} + \sqrt{b})^{2F_n} + (\sqrt{a} ...

  3. HDU 1757 A Simple Math Problem 【矩阵经典7 构造矩阵递推式】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=1757 A Simple Math Problem Time Limit: 3000/1000 MS (J ...

  4. hdu 1757 A Simple Math Problem (构造矩阵解决递推式问题)

    题意:有一个递推式f(x) 当 x < 10    f(x) = x.当 x >= 10  f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + ...

  5. P1067Warcraft III 守望者的烦恼(十大矩阵问题之七求递推式)

    https://vijos.org/p/1067 守望者-warden,长期在暗夜精灵的的首都艾萨琳内担任视察监狱的任务,监狱是成长条行的,守望者warden拥有一个技能名叫“闪烁”,这个技能可以把她 ...

  6. HDU - 2604 Queuing(递推式+矩阵快速幂)

    Queuing Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  7. hdu 5950 Recursive sequence 递推式 矩阵快速幂

    题目链接 题意 给定\(c_0,c_1,求c_n(c_0,c_1,n\lt 2^{31})\),递推公式为 \[c_i=c_{i-1}+2c_{i-2}+i^4\] 思路 参考 将递推式改写\[\be ...

  8. *HDU 1757 矩阵乘法

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

  9. 矩阵快速幂(queue递推)

    http://acm.hdu.edu.cn/showproblem.php?pid=2604 Queuing Time Limit: 10000/5000 MS (Java/Others)    Me ...

随机推荐

  1. html中设置data-*属性值 并在js中进行获取属性值

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Docker的安装与启动教程

    一.安装Docker Docker官方建议在Ubuntu中安装,因为Docker是基于Ubuntu发布的,而且一般Docker出现的问题Ubuntu是最先更新或者打补丁的.在很多版本的CentOS中是 ...

  3. 高性能缓存服务器Varnish

    一.Varnish概述 Varnish是一款高性能的.开源的反向代理服务器和缓存服务器,计算机系统的除了有内存外,还有CPU的L1.L2,甚至L3级别的缓存,Varnish的设计架构就是利用操作系统的 ...

  4. 在PL/SQL里直接插入日期时提示 is not a valid date and time的解决方法

    在PL/SQL Developer里直接往表里插入日期格式的数据时,经常会出现" is not a valid date and time"的错误,这是因为Oracle的日期格式和 ...

  5. php pdo prepare真的安全吗

    详见 这里 Let's say I have code like this: $dbh = new PDO("blahblah"); $stmt = $dbh->prepar ...

  6. leetcode-292-Nim Game(搬石子)

    题目描述: You are playing the following Nim Game with your friend: There is a heap of stones on the tabl ...

  7. 图的最短路径---迪杰斯特拉(Dijkstra)算法浅析

    什么是最短路径 在网图和非网图中,最短路径的含义是不一样的.对于非网图没有边上的权值,所谓的最短路径,其实就是指两顶点之间经过的边数最少的路径. 对于网图,最短路径就是指两顶点之间经过的边上权值之和最 ...

  8. Git学习系列之Git基本操作提交项目(图文详解)

    前面博客 Git学习系列之Git基本操作克隆项目(图文详解) 然后可以 cd 切换到 LispGentleIntro 目录, 新增或者修改某些文件.这里只是模拟一下操作, 实际情况可能是 使用 Ecl ...

  9. ubuntu编译安装protobuf

    测试环境:Ubuntu 16.04 LTS 到protobuf的release页面 下载源码:https://github.com/protocolbuffers/protobuf/releases/ ...

  10. StackMapTable属性说明

    (1)StackMapTable属性的说明 https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.7.4 (2)S ...