hdu 1757 A Simple Math Problem (乘法矩阵)
A Simple Math Problem
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2441 Accepted Submission(s): 1415
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.
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.
开始没什么思路,后来还是没思路..
然后看解题报告,发现时乘法矩阵,关键点还是在构造矩阵上。
参考:http://blog.sina.com.cn/s/blog_79b832820100wnu3.html
f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + …… + a9 * f(x-10)
构造的矩阵是:
|0 1 0 ........... 0| |f0| |f1 |
|0 0 1 0 ........ 0| |f1| |f2 |
|.....................1| * |...| = |...|
|a9 a8 .........a0 | |f9| |f10|
设为矩阵 A * 矩阵B =矩阵C
我们要求的是 f(k),就是矩阵C的最后一个元素,故依据矩阵的结合律,可看到
C=A*(A*(.....*(A*B))) ,要有k个A即 C=A^k*B ,然后就可以二分求A^k,最后乘上B就可以求得矩阵C
//0MS 232K 1214 B C++
#include<stdio.h>
#include<string.h>
#define N 15
struct matrix{
int g[N][N];
}ans,temp;
int g[N];
int m;
matrix mul(matrix a,matrix b)
{
matrix c;
for(int i=;i<;i++)
for(int j=;j<;j++){
c.g[i][j]=;
for(int k=;k<;k++)
c.g[i][j]+=a.g[i][k]*b.g[k][j];
c.g[i][j]%=m;
}
return c;
}
void solve(int k)
{
while(k){
if(k&) ans=mul(temp,ans);
temp=mul(temp,temp);
k/=;
}
int sum=;
/*
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
printf(j==9?"%d\n":"%d ",ans.g[i][j]);
*/
for(int i=;i<;i++){
sum+=ans.g[][i]*i;
sum%=m;
}
printf("%d\n",sum);
}
int main(void)
{
int k;
while(scanf("%d%d",&k,&m)!=EOF)
{
for(int i=;i<;i++)
for(int j=;j<;j++)
temp.g[i][j]=ans.g[i][j]=;
for(int i=;i<;i++)
scanf("%d",&g[i]);
for(int i=;i<;i++){
if(i<) temp.g[i][i+]=;
ans.g[i][i]=;
temp.g[][i]=g[-i];
}
solve(k-);
}
return ;
}
hdu 1757 A Simple Math Problem (乘法矩阵)的更多相关文章
- 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 ...
- HDU 1757 A Simple Math Problem (矩阵乘法)
A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- HDU 1757 A Simple Math Problem(矩阵高速幂)
题目地址:HDU 1757 最终会构造矩阵了.事实上也不难,仅仅怪自己笨..= =! f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + -- + a9 ...
- 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 1757 A Simple Math Problem(矩阵快速幂乘法)
Problem Description Lele now is thinking about a simple function f(x). If x < f(x) = x. If x > ...
- hdu 1757 A Simple Math Problem (矩阵快速幂)
Description Lele now is thinking about a simple function f(x). If x < 10 f(x) = x. If x >= 10 ...
- hdu 1757 A Simple Math Problem (矩阵快速幂,简单)
题目 也是和LightOJ 1096 和LightOJ 1065 差不多的简单题目. #include<stdio.h> #include<string.h> #include ...
- 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 (矩阵高速幂)
和这一题构造的矩阵的方法同样. 须要注意的是.题目中a0~a9 与矩阵相乘的顺序. #include <iostream> #include <cstdio> #include ...
随机推荐
- kafka2.9.2的伪分布式集群安装和demo(java api)测试
目录: 一.什么是kafka? 二.kafka的官方网站在哪里? 三.在哪里下载?需要哪些组件的支持? 四.如何安装? 五.FAQ 六.扩展阅读 一.什么是kafka? kafka是LinkedI ...
- FullCalendar只可以从外部拖入,内部不能互相拖动
startDrag: function(ev) { if(ev.originalEvent.initEvent){ return; } if (!this.isListening) { // star ...
- HTML适应手机浏览器宽度
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scal ...
- php操作文件及下载图片脚本
<?php set_time_limit(0); $handle = fopen('article.txt','r'); for($i=0;$i<1;$i++) { $count = 0; ...
- NHibernate和 FluentNHibernate
NHibernate有两类配置文件,一个是数据库连接配置文件(一般写到程序配置文件里),另一个是数据表和实体的映射文件(实体类.hbm.xml) 开源的框架Fluent NHibernate,有了它, ...
- git 分批后的数据
如果涉及到大文件的 git 传输, 我们可能会收到下面错误: sourceTree 的错误. 命令行的错误: $ git clone https://********/gopher.git C ...
- Ajax+json实现菜单动态级联
1:jsp //级联ajax处理函数 function areaChange(){ var areano=document.all("areaNo").value; v ...
- hive和ORACLE语法对比
- python发邮件
# -*- coding:utf- -*- import smtplib,os,sys,string import mimetypes from email import Encoders from ...
- JSP、HTML标签
<%@ ...%> 表示是指令,主要用来提供整个JSP 网页相关的信息,并且用来设定JSP网页的相关属性,例如:网页的编码方式.语法.信息等.起始符号为: <%@ 终止符号为: %& ...