题目链接: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. EasyUI combobox 下拉高度自适应

    要指出的是,combobox是继承自combo的,所以,combo的属性也可以被combobox使用,该问题也是这样产生的,知道这个原理,该问题就解决一半了,另一点要指出的是,在easyui中,num ...

  2. 在代码设置RelativeLayout的属性,比如layout_below

    ( (RelativeLayout.LayoutParams)holder.ivLvDivider.getLayoutParams()).addRule(RelativeLayout.BELOW, R ...

  3. lsof 常用命令

    lsof 常用命令   原文地址: Lsof 是遵从Unix 哲学的典范,它只做一件事情,并且做的相当完美——它可以列出某个进程打开的所有文件信息.打开的文件可能是普通的文件,目录,NFS文件,块文件 ...

  4. Yes, Virginia, Scala is hard

    首先要说的是,我是一个Scala粉丝,我作为一个Scala语言的倡导者差不多有5年历史了.我写了不少Scala语言方面的书和文章.我曾在数十个公司里做过Scala和Lift框架项目的开发.我对很多的S ...

  5. (满满的是硬货)Spring深入研究一IOC实现

    IOC基于Java底层的反射机制实现 反射机制: 核心: Class cls = Class.forName(类名); Class ptypes[] = new Class[2]; ptypes[0] ...

  6. charles抓包工具

    HTTP抓包 打开Charles程序 查看Mac电脑的IP地址,如192.168.1.7 打开iOS设置,进入当前wifi连接,设置HTTP代理Group,将服务器填为上一步中获得的IP,即192.1 ...

  7. 关于sysprocesses表各字段的作用

    sysprocesses 表中保存关于运行在 Microsoft® SQL Server™ 上的进程的信息.这些进程可以是客户端进程或系统进程.sysprocesses 只存储在 master 数据库 ...

  8. Linux学习 :中断处理机制 & poll机制

    中断是指在CPU正常运行期间,由于内外部事件或由程序预先安排的事件引起的CPU暂时停止正在运行的程序,转而为该内部或外部事件或预先安排的事件服务 的程序中去,服务完毕后再返回去继续运行被暂时中断的程序 ...

  9. Fix the iOS code signing issue when using Jenkins

    This week I setup the Jenkins on my Mac and try to build iOS applications. unfortunately I got the c ...

  10. 黑马程序员——C语言基础 char字符 数组

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)char类型 1)存储细节 ASCII单字节表(双字节GBK\GB2 ...