hdu 1757 矩阵连乘
先看看快速幂
int t,r,n;
void liu(int n)
{
if(n==1) {r=t;return;}
liu(n/2); //递归求出 n/2 幂
r*=r; //
if(n%2==1) r*=t; //判断奇、偶
}
矩阵连乘:
If x >= 10
f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + …… + a9 * f(x-10);
(f(n),f(n-1),….,f(n-9))=(f(9),….f(0))* 矩阵 的n-9 次方
Hdu 1757
#include<stdio.h>
#include<string.h>
int i,j,k,n,m;
int t[10][10],r[10][10],b[10][10];
void ju(int c[10][10],int d[10][10])
{
memset(b,0,sizeof(b));
for(i=0;i<10;i++)
for(j=0;j<10;j++)
for(k=0;k<10;k++) b[i][j]+=c[i][k]*d[k][j]%m;
for(i=0;i<10;i++)
for(j=0;j<10;j++) c[i][j]=b[i][j]%m;
}
void liu(int n)
{
if(n==1) return;
liu(n/2);ju(r,r);
if(n&1) ju(r,t);
}
void main()
{
memset(t,0,sizeof(t));
for(i=0;i<9;i++) t[i][1+i]=1;
//for(i=0;i<9;) t[i][++i]=1; //不知道为什么用这个循环的时候就wa,求高手指教
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n<10) {printf("%d\n",n%m);continue;}
for(i=0;i<10;i++) scanf("%d",&t[i][0]);
memcpy(r,t,sizeof(r));
liu(n-9);
for(i=n=0;i<9;i++) n+=(9-i)*r[i][0]%m; //注意这里是 9-i
printf("%d\n",n%m);
}
}
转载于:https://www.cnblogs.com/jufu/archive/2012/03/25/2416294.html
hdu 1757 矩阵连乘相关推荐
- hdu 1757(矩阵快速幂)
题意:公式如下 If x < 10 f(x) = x. If x >= 10 f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + -- + a ...
- 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) + -- ...
- hdu 4291 矩阵幂 循环节
http://acm.hdu.edu.cn/showproblem.php?pid=4291 凡是取模的都有循环节-----常数有,矩阵也有,并且矩阵的更奇妙: g(g(g(n))) mod 109 ...
- HDU 1757 A Simple Math Problem (矩阵快速幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1757 在吴神的帮助下才明白如何构造矩阵,还是好弱啊. 此处盗一张图 1 #include <io ...
- 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) + -- + ...
- 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 ...
- 43行代码AC——HDU 1757 A Simple Math Problem(矩阵快速幂,附快速幂讲解)
一道经典的矩阵快速幂模板题. 传送门1-->快速幂基本思想 传送门2-->矩阵快速幂讲解(教主传授) 代码(去掉空行43行) #include<iostream> #inclu ...
- 【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) = ...
- 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 * ...
最新文章
- 《机器学习技法》---模型聚合
- C#中File的使用
- 牛人 20000 字的 Spring Cloud 总结,太硬核了~
- 关于GC.Collect在不同机器上表现不一致问题
- 什么是java双亲委派机制
- 解决svn错误:post-commit hook failed (exit code 1) with output
- 美团点评云真机平台实践
- vimdiff的简单使用
- 关于电子通信的一些概念
- 骑行日志2011滇藏珠峰尼泊尔青藏 - 记那些逝去的青春
- 十进制转换为十二进制 Java
- FFmpeg转换ts为mp4
- java点赞判断恶意点击_重庆网络营销教你使用对恶意点击的必杀技!
- 计算机组策略定时开机脚本,批处理+组策略 实现规定时间段无法开机and定时关机...
- Verilog语言语句介绍
- 重写hashcode方法需要重写equals方法吗?为什么?
- 小米手机android目录在哪里设置字体,在哪里修改小米手机的字体大小
- JavaScript基础(4)_强制类型转换
- Winform(C#) 国内开源美化控件主题库3: HZHControls
- 使用python绘制有效性前沿