题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5950

题意:f(n) = f(n-1) + 2*f(n-2) + n^4,f(1) = a , f(2) = b,求f(n)

思路:对矩阵快速幂的了解仅仅停留在fib上,重现赛自己随便乱推还一直算错,快两个小时才a还wa了好几次....

主要就是构造矩阵:(n+1)^4 = n^4 + 4n^3 + 6n^2 + 4n + 1

|1   2   1   4   6   4   1|     |   f(n+1)   |           |    f(n+2)    |

|1   0   0   0   0   0   0|     |     f(n)     |           |    f(n+1)    |

|0   0   1   4   6   4   1|     | (n+1)^4  |           |  (n+2)^4   |

|0   0   0   1   3   3   1|  * | (n+1)^3  |     =    |  (n+2)^3   |

|0   0   0   0   1   2   1|     | (n+1)^2  |           |  (n+2)^2  |

|0   0   0   0   0   1   1|     |    n+1     |           |     n+2      |

|0   0   0   0   0   0   1|     |      1       |           |       1        |

 #include<cstdio>
using namespace std;
typedef long long ll;
const ll mod = ;
ll n,a,b;
struct Matrix
{
ll m[][];
void init1()
{
m[][] = b,m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ;
m[][] = a,m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ;
m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ;
m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ;
m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ;
m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ;
m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ;
}
void init2()
{
m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ;
m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ;
m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ;
m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ;
m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ;
m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ;
m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ,m[][] = ;
}
Matrix operator * (Matrix t)
{
Matrix res;
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
res.m[i][j] = ;
for (int k = ;k < ; k++)
res.m[i][j] = (res.m[i][j] + (m[i][k] % mod) * (t.m[k][j] % mod) % mod) % mod;
}
}
return res;
}
Matrix operator ^ (int k)
{
Matrix res,s;
res.init2();
s.init2();
while(k)
{
if(k & )
res = res * s;
k >>= ;
s = s * s;
}
return res;
}
};
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%lld %lld %lld",&n,&a,&b);
if(n == )
{
printf("%lld\n",a % mod);
continue;
}
if(n == )
{
printf("%lld\n",b % mod);
continue;
}
Matrix ans,t;
ans.init1();
t.init2();
ans = (t^(n-)) * ans;
printf("%lld\n",ans.m[][]);
}
return ;
}

HDU5950(矩阵快速幂)的更多相关文章

  1. HDU5950 矩阵快速幂(巧妙的递推)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5950 题意:f[n] = 2*f[n-2] + f[n-1] + n^4 思路:对于递推题而言,如果递 ...

  2. HDU5950 Recursive sequence —— 矩阵快速幂

    题目链接:https://vjudge.net/problem/HDU-5950 Recursive sequence Time Limit: 2000/1000 MS (Java/Others)   ...

  3. 【HDU5950】Recursive sequence(矩阵快速幂)

    BUPT2017 wintertraining(15) #6F 题意 \(f(1)=a,f(2)=b,f(i)=2*(f(i-2)+f(i-1)+i^4)\) 给定n,a,b ,\(N,a,b < ...

  4. HDU5950 Recursive sequence (矩阵快速幂加速递推) (2016ACM/ICPC亚洲赛区沈阳站 Problem C)

    题目链接:传送门 题目: Recursive sequence Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total ...

  5. HDU5950 Recursive sequence 非线性递推式 矩阵快速幂

    题目传送门 题目描述:给出一个数列的第一项和第二项,计算第n项. 递推式是 f(n)=f(n-1)+2*f(n-2)+n^4. 由于n很大,所以肯定是矩阵快速幂的题目,但是矩阵快速幂只能解决线性的问题 ...

  6. HDU5950【矩阵快速幂】

    主要还是i^4化成一个(i+1)^4没遇到过,还是很基础的一题矩阵快速幂: #include <bits/stdc++.h> using namespace std; typedef lo ...

  7. RecursiveSequence(HDU-5950)【矩阵快速幂】

    题目链接: 题意:Si=S(i-1)+2*S(i-2)+i^4,求Sn. 思路:想到了矩阵快速幂,实在没想出来怎么构造矩阵.... 首先构造一个向量vec={a,b,16,8,4,2,1}. 在构造求 ...

  8. 一些特殊的矩阵快速幂 hdu5950 hdu3369 hdu 3483

    思想启发来自, 罗博士的根据递推公式构造系数矩阵用于快速幂 对于矩阵乘法和矩阵快速幂就不多重复了,网上很多博客都有讲解.主要来学习一下系数矩阵的构造 一开始,最一般的矩阵快速幂,要斐波那契数列Fn=F ...

  9. hdu3483 A Very Simple Problem 非线性递推方程2 矩阵快速幂

    题目传送门 题目描述:给出n,x,mod.求s[n]. s[n]=s[n-1]+(x^n)*(n^x)%mod; 思路:这道题是hdu5950的进阶版.大家可以看这篇博客hdu5950题解. 由于n很 ...

随机推荐

  1. mybatis高级(3)_延迟加载_深度延迟_一级缓存_二级缓存

    设置延迟加载需要在mybatis.xml中设置 注: 侵入式延迟加载为真时是延迟加载 侵入式延迟加载为假时是深度延迟加载 <!-- 延迟加载和深度延迟加载 --> <settings ...

  2. css利用padding生成图标

    先插入HTML结构: <div class="line-three"></div> <div class="circle"> ...

  3. [整]磁盘 I/O 性能监控指标和调优方法

    在介绍磁盘 I/O 监控命令前,我们需要了解磁盘 I/O 性能监控的指标,以及每个指标的所揭示的磁盘某方面的性能. 磁盘 I/O 性能监控的指标主要包括: 指标 1:每秒 I/O 数(IOPS 或 t ...

  4. MySQL 5.6查询优化器新特性的“BUG” eq_range_index_dive_limit

    本文转自 http://www.imysql.cn 最近碰到一个慢SQL问题,解决过程有点小曲折,和大家分享下. SQL本身不复杂,表结构.索引也比较简单,不过个别字段存在于多个索引中. CREATE ...

  5. Java自由块(静态和非静态)(转载)

    java中的自由块分为两种: 静态块和非静态块 静态块: public class Test { 2 static int x = 10; 3 //静态块:静态块的执行时机是在class文件装载的时候 ...

  6. 转: Rest简介及Spring实现

    一 Roy Fielding 2000年Rest被Roy Fielding提出来的,我对Roy Fielding的印象有以下几个. 一是RoyFielding做为Http协议的起草者,在Http协议发 ...

  7. μC/OS-Ⅲ系统的中断管理

    一.典型的μC/OS-Ⅲ中断服务程序解析 μC/OS-Ⅲ系统中典型有内核参与中断服务程序示例如下: MyISR:                                             ...

  8. 设计模式(3)--抽象工厂模式(Absrtact Factory Pattern)

    定义 抽象工厂模式的实质就是提供接口来创建一系列相关或独立的对象而不指定这些对象的具体类. 理解 在软件系统中,经常面临着"一系列相互依赖的对象"的创建工作:同时由于需求的变化,往 ...

  9. 计算机网络(13)-----java nio手动实现简单的http服务器

    java nio手动实现简单的http服务器  需求分析 最近在学习HTTP协议,还是希望动手去做一做,所以就自己实现了一个http服务器,主要功能是将http请求封装httpRequest,通过解析 ...

  10. 基于Flask的Web应用部署到SAE上遇到的问题

    我的应用底层数据库用的是MySQL,利用Flask-SQLALchemy实现接口操作.我遇到的问题是: 在我把代码部署到SAE上后,当数据向数据库insert的时候总是出现“2006,MySQL ha ...