题目大意:

  f(n) = a1 f(n - 1) + a2 f(n - 2) + a3 f(n - 3) + ... + ad f(n - d),已给递推公式,求f(n)的大小。

解题思路:

  n很大,所以我们就要构造矩阵,运用矩阵快速幂来求解。//题目描述上口口声声说int范围内,但是大家一定不要天真!!!!!!

 #include <iostream>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <cstring>
using namespace std; #define LL long long
const int maxn = ;
LL d, m;
struct mat
{
LL p[maxn][maxn];
}; mat mul (mat a, mat b);
mat pow (LL n, mat a, mat b); int main ()
{
LL n;
mat a, b; while (scanf ("%lld %lld %lld", &d, &n, &m), n+m+d)
{
memset (a.p, , sizeof(a.p));
memset (b.p, , sizeof(b.p)); for (int i=; i<d; i++)//构造矩阵
{
scanf ("%lld", &a.p[i][]);
a.p[i][] %= m;
a.p[i][i+] = ;
}
for (int i=; i<d; i++)//这个矩阵要反过来输入!!!!!!
{
scanf ("%lld", &b.p[][d-i-]);
b.p[][i] %= m;
} if (d < n)
{
b = pow (n-d, a, b);
printf ("%lld\n", b.p[][]);
}
else
printf ("%lld\n", b.p[][d-n]);
}
return ;
} mat mul (mat a, mat b)
{
mat c;
memset (c.p, , sizeof(c.p));
for (int i=; i<d; i++)
for (int j=; j<d; j++)
{
for (int k=; k<d; k++)
c.p[i][j] = (c.p[i][j] + a.p[i][k] * b.p[k][j]) % m;
}
return c;
}
mat pow (LL n, mat a, mat b)
{
while (n)
{
if (n % )
b = mul (b, a);
a = mul (a, a);
n /= ;
}
return b;
}

UVA Recurrences 矩阵相乘+快速幂的更多相关文章

  1. Luogu 1349 广义斐波那契数列(递推,矩阵,快速幂)

    Luogu 1349 广义斐波那契数列(递推,矩阵,快速幂) Description 广义的斐波那契数列是指形如\[A_n=p*a_{n-1}+q*a_{n-2}\]的数列.今给定数列的两系数p和q, ...

  2. 洛谷 P4910 帕秋莉的手环 矩阵乘法+快速幂详解

    矩阵快速幂解法: 这是一个类似斐波那契数列的矩乘快速幂,所以推荐大家先做一下下列题目:(会了,差不多就是多倍经验题了) 注:如果你不会矩阵乘法,可以了解一下P3390的题解 P1939 [模板]矩阵加 ...

  3. Qbxt 模拟赛 Day4 T2 gcd(矩阵乘法快速幂)

    /* 矩阵乘法+快速幂. 一开始迷之题意.. 这个gcd有个规律. a b b c=a*x+b(x为常数). 然后要使b+c最小的话. 那x就等于1咯. 那么问题转化为求 a b b a+b 就是斐波 ...

  4. 矩阵乘法快速幂 codevs 1574 广义斐波那契数列

    codevs 1574 广义斐波那契数列  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond   题目描述 Description 广义的斐波那契数列是指形如 ...

  5. 矩阵乘法快速幂 codevs 1732 Fibonacci数列 2

    1732 Fibonacci数列 2  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 在“ ...

  6. hdu 5607 graph (矩阵乘法快速幂)

    考虑一个经典的问题: 询问从某个点出发,走 k 步到达其它各点的方案数? 这个问题可以转化为矩阵相乘,所以矩阵快速幂即可解决. 本题思路: 矩阵经典问题:求从i点走k步后到达j点的方案数(mod p) ...

  7. 矩阵二分快速幂优化dp动态规划

    矩阵快速幂代码: int n; // 所有矩阵都是 n * n 的矩阵 struct matrix { int a[100][100]; }; matrix matrix_mul(matrix A, ...

  8. 【BZOJ-1009】GT考试 KMP+DP+矩阵乘法+快速幂

    1009: [HNOI2008]GT考试 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2745  Solved: 1694[Submit][Statu ...

  9. BZOJ-1875 HH去散步 DP+矩阵乘法快速幂

    1875: [SDOI2009]HH去散步 Time Limit: 20 Sec Memory Limit: 64 MB Submit: 1196 Solved: 553 [Submit][Statu ...

随机推荐

  1. 关于MySQL的boolean和tinyint(1)

    原文:http://blog.csdn.net/woshixuye/article/details/7089508 MySQL保存boolean值时用1代表TRUE,0代表FALSE.boolean在 ...

  2. C#内存管理—职场生存的必修课

    前言 在职场中,确立自身的技术水平很重要,因为,如果你被标记成了技术菜鸟,那么你的工作一旦做快了,大家就会一致的认为这个任务比较简单:如果你未如期完成,则会被各种明嘲暗讽,你不但无法获得合理的表扬,还 ...

  3. hdu1181 dfs搜索之变形课

    原题地址 这道题数据据说比較水,除了第一组数据是Yes以外.其余都是No.非常多人抓住这点就水过了.当然了,我认为那样过了也没什么意思.刷oj刷的是质量不是数量. 这道题从题目上来看是个不错的 搜索题 ...

  4. Eclipse中git插件导入远程库和上传项目源代码到远程库

    陆陆续续,从github,csdn的code.之前实习的小公司也是用git管理.发如今版本号控制方面确实比較方便.代码一敲完 . 自己由于完毕了新功能.加入一个新分支.然后提交上去,这就是程序猿一天干 ...

  5. ZXing-core生成二维码和解析

    如今二维码这么流行的时刻.也必须知道二维码是怎么生成.如今我们就来看看,是怎么生成的. 事实上主要是利用goggle公布的jar来使用:本文转自点击打开链接 1.二维码的生成 将Zxing-core. ...

  6. 关于Scrum

    最近某些产品经理发出下两周的工作计划的时候,喜欢带上sprint这个字眼,看上去貌似是要走敏捷开发这一套,只可惜,我觉得他表现出来的是对敏捷开发和Scrum一窍不通,甚至对软件开发流程都完全不清楚,居 ...

  7. id 查询

    Ids Query | Elasticsearch Reference [6.2] | Elastic http://www.elastic.co/guide/en/elasticsearch/ref ...

  8. GET 与 POST 的理解

    1 HTTP请求      超文本传输协议(HTTP)的设计目的是保证客户机与服务器之间的通信.      HTTP 的工作方式是客户机与服务器之间的请求-应答协议.      比如,客户端(浏览器) ...

  9. jdk 版本不一致导致的错误

    平时做项目时难免会从git,svn下载代码或者把别人的项目文件导入到自己的MyEclipse中进行操作,因此会遇到很多问题,常见的有一种是使用的jdk版本不一致造成的报错, 错误案例:     错误提 ...

  10. POJ1679 The Unique MST —— 次小生成树

    题目链接:http://poj.org/problem?id=1679 The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total S ...