https://vjudge.net/problem/UVA-10870

题意:

f(n) = a1f(n − 1) + a2f(n − 2) + a3f(n − 3) + . . . + adf(n − d), for n > d

给出f(1),f(2) ... f(d) 以及a1,a2...ad,然后给出一个n和m的值,计算f(n) % m的值

思路:

矩阵快速幂模板题,只是构建矩阵比较困难,其实这题的构建矩阵是比较简单的,这题的模型也是一个相当广泛的模型。

|a1 a2 a3 a4 a5|                | f[n]     |      | f[n+1] |  
   |1                      |                | f[n-1]  |      | f[n]    |  
   |     1                 |       *        | f[n-2]  | =   | f[n-1] | (空白处为0)
   |          1            |                | f[n-3]  |      | f[n-2] |
   |              1        |                | f[n-4]  |      | f[n-3] |

就是这样一个关系,可以用手推一下。

f(n) = A^(n-d) * f(d);

之后就直接套模板啦。

最后的f(n)其实是通过得到的结果矩阵的第一行乘以f(d)这个矩阵得到的,只不过乘的时候要关注原矩阵的顺序,别乘反了。

注意在n <= d的时候是直接取余输出的。(矩阵乘法的时候也要一边乘,一边取余)。

代码:

 #include <stdio.h>
#include <string.h> long long d,n,m; long long f[]; struct matrix
{
long long a[][];
}; matrix mul(matrix x,matrix y)
{
matrix c; for (int i = ;i < d;i++)
for (int j = ;j < d;j++)
{
c.a[i][j] = ; for (int k = ;k < d;k++)
{
c.a[i][j] = (c.a[i][j] + x.a[i][k] * y.a[k][j] % m) % m;
}
} return c;
} void solve(matrix t,long long o)
{
matrix e; memset(e.a,,sizeof(e.a)); for (int i = ;i < d;i++)
e.a[i][i] = ; while (o)
{
if (o & )
{
e = mul(e,t);
} o >>= ; t = mul(t,t);
} long long res = ; for (int i = ;i < d;i++)
res = (res + e.a[][i] * f[d-i-]) % m; printf("%lld\n",res);
} int main()
{ while (scanf("%lld%lld%lld",&d,&n,&m) != EOF)
{
if (d == && n == && m == ) break; matrix p; memset(p.a,,sizeof(p.a)); for (int i = ;i < d;i++)
scanf("%lld",&p.a[][i]); for (int i = ;i < d;i++)
p.a[i][i-] = ; for (int i = ;i < d;i++)
scanf("%lld",&f[i]); if (n <= d)
{
printf("%lld\n",f[n-] % m); continue;
} solve(p,n-d);
} return ;
}

uva 10870的更多相关文章

  1. UVA 10870 - Recurrences(矩阵高速功率)

    UVA 10870 - Recurrences 题目链接 题意:f(n) = a1 f(n - 1) + a2 f(n - 2) + a3 f(n - 3) + ... + ad f(n - d), ...

  2. UVa 10870 - Recurrences

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  3. 矩阵快速幂 UVA 10870 Recurrences

    题目传送门 题意:f(n) = a1f(n − 1) + a2f(n − 2) + a3f(n − 3) + . . . + adf(n − d), for n > d,求f (n) % m.训 ...

  4. UVa 10870 & 矩阵快速幂

    题意: 求一个递推式(不好怎么概括..)的函数的值. 即 f(n)=a1f(n-1)+a2f(n-2)+...+adf(n-d); SOL: 根据矩阵乘法的定义我们可以很容易地构造出矩阵,每次乘法即可 ...

  5. UVa 10870 (矩阵快速幂) Recurrences

    给出一个d阶线性递推关系,求f(n) mod m的值. , 求出An-dv0,该向量的最后一个元素就是所求. #include <iostream> #include <cstdio ...

  6. Recurrences UVA - 10870 (斐波拉契的一般形式推广)

    题意:f(n) = a1f(n−1) + a2f(n−2) + a3f(n−3) + ... + adf(n−d), 计算这个f(n) 最重要的是推出矩阵. #include<cstdio> ...

  7. UVA 10870 Recurrences(矩阵乘法)

    题意 求解递推式 \(f(n)=a_1*f(n-1)+a_2*f(n-2)+....+a_d*f(n-d)\) 的第 \(n\) 项模以 \(m\). \(1 \leq n \leq 2^{31}-1 ...

  8. UVa 10870 Recurrences (矩阵快速幂)

    题意:给定 d , n , m (1<=d<=15,1<=n<=2^31-1,1<=m<=46340).a1 , a2 ..... ad.f(1), f(2) .. ...

  9. UVA - 10870 Recurrences 【矩阵快速幂】

    题目链接 https://odzkskevi.qnssl.com/d474b5dd1cebae1d617e6c48f5aca598?v=1524578553 题意 给出一个表达式 算法 f(n) 思路 ...

随机推荐

  1. Filecoin协议(挖矿)

    Filecoin协议是如何运作的? 用户如何使用Filecoin系统来查询,存储数据? 存储矿工如何挖矿,如何获取FIL代币? 检索矿工如何挖矿,获取FIL代币? 本文主要回答上面的这些问题!!! 首 ...

  2. FNV算法实战

    HASH算法介绍 Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长 ...

  3. 1-1hibernate数据库操作基础

    一.纯原始数据库连接详见http://www.cnblogs.com/lukelook/p/7845757.html 1.Class.forName("oracle.jdbc.driver. ...

  4. Python实现制度转换(货币,温度,长度)

    人民币和美元是世界上通用的两种货币之一,写一个程序进行货币间币值转换,其中: 人民币和美元间汇率固定为:1美元 = 6.78人民币. 程序可以接受人民币或美元输入,转换为美元或人民币输出.人民币采用R ...

  5. 研华ADAM 6000系列型号枚举值

    public enum Adam6000Type    {        Non = 0,        Adam6015 = 6015,        Adam6017 = 6017,        ...

  6. poj-1503-java大数相加

    Description One of the first users of BIT's new supercomputer was Chip Diller. He extended his explo ...

  7. 【Python】 用户图形界面GUI wxpython II 布局和事件

    wxpython - 布局和事件 这章主要记录布局器Sizer以及事件的用法. // 目前还需要记录的:Sizer的Add方法加空白,Sizer的Layout,Sizer的Remove如何有效 ■ 布 ...

  8. Mysql的执行计划各个参数详细说明

    执行计划各个参数的说明 1.id 主要是用来标识sql的执行顺序,如果没有子查询,一般来说id只有一个,执行顺序也是从上到下 2.select_type 每个select子句的类型 a:  simpl ...

  9. vs连接Oracle 客户端库时引发 BadImageFormatException

    报错:Oracle 客户端库时引发 BadImageFormatException如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式? 解决方案:http://www.cnblog ...

  10. 【Java EE】从零开始写项目【总结】

    从零开发项目概述 最近这一直在复习数据结构和算法,也就是前面发出去的排序算法八大基础排序总结,Java实现单向链表,栈和队列就是这么简单,十道简单算法题等等... 被虐得不要不要的,即使是非常简单有时 ...