HDU5950(矩阵快速幂)
题目链接: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(矩阵快速幂)的更多相关文章
- HDU5950 矩阵快速幂(巧妙的递推)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5950 题意:f[n] = 2*f[n-2] + f[n-1] + n^4 思路:对于递推题而言,如果递 ...
- HDU5950 Recursive sequence —— 矩阵快速幂
题目链接:https://vjudge.net/problem/HDU-5950 Recursive sequence Time Limit: 2000/1000 MS (Java/Others) ...
- 【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 < ...
- HDU5950 Recursive sequence (矩阵快速幂加速递推) (2016ACM/ICPC亚洲赛区沈阳站 Problem C)
题目链接:传送门 题目: Recursive sequence Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total ...
- HDU5950 Recursive sequence 非线性递推式 矩阵快速幂
题目传送门 题目描述:给出一个数列的第一项和第二项,计算第n项. 递推式是 f(n)=f(n-1)+2*f(n-2)+n^4. 由于n很大,所以肯定是矩阵快速幂的题目,但是矩阵快速幂只能解决线性的问题 ...
- HDU5950【矩阵快速幂】
主要还是i^4化成一个(i+1)^4没遇到过,还是很基础的一题矩阵快速幂: #include <bits/stdc++.h> using namespace std; typedef lo ...
- RecursiveSequence(HDU-5950)【矩阵快速幂】
题目链接: 题意:Si=S(i-1)+2*S(i-2)+i^4,求Sn. 思路:想到了矩阵快速幂,实在没想出来怎么构造矩阵.... 首先构造一个向量vec={a,b,16,8,4,2,1}. 在构造求 ...
- 一些特殊的矩阵快速幂 hdu5950 hdu3369 hdu 3483
思想启发来自, 罗博士的根据递推公式构造系数矩阵用于快速幂 对于矩阵乘法和矩阵快速幂就不多重复了,网上很多博客都有讲解.主要来学习一下系数矩阵的构造 一开始,最一般的矩阵快速幂,要斐波那契数列Fn=F ...
- hdu3483 A Very Simple Problem 非线性递推方程2 矩阵快速幂
题目传送门 题目描述:给出n,x,mod.求s[n]. s[n]=s[n-1]+(x^n)*(n^x)%mod; 思路:这道题是hdu5950的进阶版.大家可以看这篇博客hdu5950题解. 由于n很 ...
随机推荐
- java通过文件路径读取该路径下的所有文件并将其放入list中
java通过文件路径读取该路径下的所有文件并将其放入list中 java中可以通过递归的方式获取指定路径下的所有文件并将其放入List集合中.假设指定路径为path,目标集合为fileList,遍 ...
- JavaScript toLocaleString() 方法
JavaScript toLocaleString() 方法 JavaScript Array 对象 定义和用法 把数组转换为本地字符串. 语法 arrayObject.toLocaleString( ...
- angularJs|es6|reactJs|vueJs相关技术(请访问https://expendo.github.io/)
技术博客地址:https://expendo.github.io/
- 关于PHP函数time() date() 和 strtotime() 的时区问题
最近项目中有个需求, 要记录新注册用户的次日登录情况, 于是写出了如下代码: $create_time = '用户注册时间'; //格式 Y-m-d H:i:s $time = time(); $la ...
- CGI,FastCGI,PHP-CGI与PHP-FPM
CGI CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上. CGI可以用任何一 ...
- 2015-01-19 .Net 软件工程师 笔试题
填空题 1.String是__类型(值类型或引用类型) 2.int的基类是__ 3.实现__的类,可以应用foreach语句 4.要输出一段XML文档,用__类来实现能够确保输出正确格式的XML,输出 ...
- linux php 安装 memcache 扩展
1. memcached依赖于libevent,需要先安装libevent. tar zxvf libevent-2.0.21-stable.tar.gz cd libevent-2.0.21-sta ...
- 在CentOS 6.7中安装NVIDIA GT730显卡驱动的手记
主机: Dell OptiPlex 390 MT (i5) 系列: 主机原配独显,型号未知,运转三年半,常有异响,关机之后过一阵再开机,可以解决.最近,风扇的声音实在不正常,重启也无解,判定它挂了.风 ...
- sublime简书安装配置
sublime-text3编辑器 安装 sudo add-apt-repository ppa:webupd8team/sublime-text-3 sudo apt-get update sudo ...
- 关于DMA和它的仇家
[基础知识]什么叫做DMA?DMA=Direct Memory Access.这是一种通过硬件实现的数据传输机制.简单的说,就是不在CPU的参与下完成数据的传输.[/基础知识]不太明白?我举个简单的例 ...