题意:函数f(x),

若 x < 10 f(x) = x.

若 x >= 10 f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + …… + a9 * f(x-10);

且 ai(0<=i<=9) 仅为 0 或 1 .

给定k,m,求f(k)%m;

思路:求一个递推函数的函数值,显然是矩阵快速幂,矩阵构造方法如下:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef struct node
{int matrix[55][55];
}Matrix;
Matrix a,sa,unit;
int n,k,t,mm;
int num[50005];
Matrix add(Matrix a,Matrix b)
{int i,j;Matrix c;for(i=0;i<10;i++){for(j=0;j<10;j++){c.matrix[i][j]=a.matrix[i][j]+b.matrix[i][j];c.matrix[i][j]%=mm;}}return c;
}
Matrix mul(Matrix a,Matrix b)
{int i,j,h;Matrix c;for(i=0;i<10;i++){for(j=0;j<10;j++){c.matrix[i][j]=0;for(h=0;h<10;h++){c.matrix[i][j]=c.matrix[i][j]+(a.matrix[i][h]*b.matrix[h][j]);c.matrix[i][j]%=mm;}}}return c;
}
Matrix cal(int e)
{Matrix p,q;p=a,q=unit;while(e!=1){if(e&1){e--;q=mul(p,q);}else{e/=2;p=mul(p,p);}}p=mul(p,q);return p;
}
Matrix sum(int k)
{Matrix temp,tnow;if(k==1) return a;temp=sum(k/2);if(k&1){tnow=cal(k/2+1);temp=add(temp,mul(temp,tnow));temp=add(temp,tnow);}else{tnow=cal(k/2);temp=add(temp,mul(temp,tnow));}return temp;
}
int main()
{int i,j,ss,ans;while(scanf("%d%d",&k,&mm)!=EOF){memset(num,0,sizeof(num));memset(a.matrix,0,sizeof(a.matrix));for(i=0;i<10;i++){scanf("%d",&a.matrix[0][i]);unit.matrix[i][i]=1;if(i<9)a.matrix[i+1][i]=1;}if(k<10){printf("%d\n",k%mm);continue;}sa=cal(k-9);//先求构造矩阵的k-9次方        ans=0;for(i=0;i<10;i++){ans+=sa.matrix[0][i]*(9-i);ans%=mm;}printf("%d\n",ans);}return 0;
}

转载于:https://www.cnblogs.com/dashuzhilin/p/4392850.html

hdu 1757 A Simple Math Problem 构造矩阵相关推荐

  1. HDU 1757 A Simple Math Problem(矩阵快速幂)

    题目链接 题意 :给你m和k, 让你求f(k)%m.如果k<10,f(k) = k,否则 f(k) = a0 * f(k-1) + a1 * f(k-2) + a2 * f(k-3) + -- ...

  2. HDU - 1757 A Simple Math Problem (矩阵快速幂)

    Lele now is thinking about a simple function f(x). If x < 10 f(x) = x.  If x >= 10 f(x) = a0 * ...

  3. 43行代码AC——HDU 1757 A Simple Math Problem(矩阵快速幂,附快速幂讲解)

    一道经典的矩阵快速幂模板题. 传送门1-->快速幂基本思想 传送门2-->矩阵快速幂讲解(教主传授) 代码(去掉空行43行) #include<iostream> #inclu ...

  4. HDU 1757 A Simple Math Problem (矩阵快速幂)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1757 在吴神的帮助下才明白如何构造矩阵,还是好弱啊. 此处盗一张图 1 #include <io ...

  5. HDU - 1757 A Simple Math Problem(矩阵快速幂,水题)

    题目链接:点击查看 题目大意:实现公式: f(x)=x,x<10 f(x)=a0*f(x-1)+a1*f(x-2)+--+a9*f(x-10) 题目给出a0~a9,一个n和一个m,要求输出f(n ...

  6. HDU 1757 A Simple Math Problem

    Problem Description Lele now is thinking about a simple function f(x). If x < 10 f(x) = x. If x & ...

  7. HDOJ 1757 A Simple Math Problem(矩阵快速幂)

    2018-5-24 简单的矩阵快速幂问题,重点是如何找到对应关系. f(10) a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 f(9) f(9) 1 0 0 0 0 0 0 0 0 0 ...

  8. HDU - 5974 A Simple Math Problem 题解

    D - Simple Math Problem 戳上方进入原题哟~ 题目大意 给一个数 a,b. 让你求满足一下条件的 X,Y: X+Y = a LCM(X,Y) = b 解析 题目给出时间限制1s, ...

  9. 【HDU - 1757】A Simple Math Problem (矩阵快速幂)

    题干: Lele now is thinking about a simple function f(x). If x < 10 f(x) = x.  If x >= 10 f(x) = ...

最新文章

  1. LeetCode Majority Element
  2. 浙江人22条经典经商法则(转载)
  3. phpstudy中的mysql
  4. [推荐]VMware Workstation 6.5虚拟机(汉化补丁+注册机+原版安装文件)
  5. Linux单机安装kafka
  6. 基于K60/K66/LPC的HC-SR04超声波测距(附带代码)
  7. oracle输入命令为什么显示2,oracle安装后完善2-2 sqlplus配置变量 命令提示符如何显示为用户名...
  8. 使用XPathExpression类对XML文件进行排序
  9. mysql获取当天,昨天,本周,本月,上周,上月的起始时间
  10. Android界面绘制流程--------How Android Draws Views
  11. 凸优化第五章对偶 5.9广义不等式
  12. 比特率与波特率有何差别?—Vecloud
  13. 替代YY语音,自行搭建语音实时服务器
  14. Codeforces Round #531 F. Elongated Matrix (状压dp)
  15. 《资治通鉴》-卷四(二)
  16. .NET主流的ORM框架
  17. 数据库提示错误代码ora 01688
  18. linux python 安装失败,Linux下面安装Python常见错误解决方法
  19. 汉诺塔问题——分治思想
  20. 全球及中国智能机器人产业整体运营状况与投资产值分析报告2022版

热门文章

  1. Unity3D for iOS初级教程:Part 2/3
  2. nothing about web app azure
  3. [置顶] OAuth工作原理随想——让你的系统提供的服务更加安全
  4. java的query_Java-Query
  5. java 面向组件_Java 面向对象
  6. 【Android 逆向】函数拦截 ( ARM 架构下的插桩拦截 | 完整代码示例 )
  7. 【Android 逆向】Android 进程代码注入原理 ( 注入本质 | 静态注入和动态注入 | 静态注入两种方式 | 修改动态库重打包 | 修改 /data/app/xx/libs 动态库 )
  8. 【RecyclerView】 六、RecyclerView.ItemDecoration 条目装饰 ( 简介 | onDraw | onDrawOver | getItemOffsets )
  9. 【Android RTMP】RTMPDump 推流过程 ( 独立线程推流 | 创建推流器 | 初始化操作 | 设置推流地址 | 启用写出 | 连接 RTMP 服务器 | 发送 RTMP 数据包 )
  10. c++ 新技能get 统计单词数