HDU 5950 Recursive sequence(矩阵快速幂)
来源:互联网 发布:网络机柜检验报告 编辑:程序博客网 时间:2024/05/29 15:28
题意:
给出一个表达式 fn= fn-1 + 2*f(n-2 ) +n^4
思路:
重点在于n^4 的拆解,如何可以拆解为n-1的若干项的形式,可以考虑用二项式展开来拆解,也就是将n^4 拆解为 ((n-1)+1)^4,之后C(4,0)(n-1)^4+C(4,1)(n-1)^3如此即可
#include <iostream>#include <stdlib.h>#include <string.h>#include <stdio.h>#include <queue>using namespace std;typedef long long ll;ll n,m;const int maxn=8;const ll mod=2147493647;struct Matrix//矩阵的类{ ll a[maxn][maxn]; void init() //将其初始化为单位矩阵 { memset(a,0,sizeof(a)); for(int i=1;i<maxn;i++) a[i][i]=1; }} ;Matrix mul(Matrix a,Matrix b) //(a*b)%mod 矩阵乘法{ Matrix ans; memset(ans.a,0,sizeof(ans.a)); for(int i=1;i<maxn;i++) { ans.a[i][i]=1; } for(int i=1;i<maxn;i++) for(int j=1;j<maxn;j++) { ans.a[i][j]=0; for(int k=1;k<maxn;k++) ans.a[i][j]+=a.a[i][k]*b.a[k][j]%mod; ans.a[i][j]%=mod; } return ans;}Matrix pow(Matrix a){ Matrix res ; memset(res.a,0,sizeof(res.a)); for(int i=1;i<maxn;i++) { res.a[i][i]=1; } while(n) { if(n&1) { res=mul(a,res); } a=mul(a,a); n/=2; } return res;}int main(){ int t; scanf("%d",&t); while(t--) { ll a,b; scanf("%lld%lld%lld",&n,&a,&b); Matrix ans; ans.a[1][1]=b,ans.a[2][1]=a,ans.a[3][1]=16,ans.a[4][1]=8,ans.a[5][1]=4,ans.a[6][1]=2,ans.a[7][1]=1; Matrix base,res; ll sss[8][8]={ {0,0,0,0,0,0,0,0}, {0,1,2,1,4,6,4,1}, {0,1,0,0,0,0,0,0}, {0,0,0,1,4,6,4,1}, {0,0,0,0,1,3,3,1}, {0,0,0,0,0,1,2,1}, {0,0,0,0,0,0,1,1}, {0,0,0,0,0,0,0,1}}; for(int i=0;i<=7;i++) { for(int j=0;j<=7;j++) base.a[i][j]=sss[i][j]; } if(n==1) { printf("%lld\n",a); } else if(n==2) { printf("%lld\n",b); } else { n=n-2; res=pow( base ); ans=mul(res,ans); printf("%lld\n",ans.a[1][1]); } }}
阅读全文
0 0
- HDU 5950 Recursive sequence(矩阵构造+矩阵快速幂)
- [hdu 5950 Recursive sequence] 矩阵快速幂
- HDU-5950-Recursive sequence-矩阵快速幂
- HDU 5950 Recursive sequence 矩阵快速幂
- [矩阵快速幂]HDU 5950 Recursive sequence
- HDU 5950 Recursive sequence(矩阵快速幂)
- hdu 5950 Recursive sequence(矩阵快速幂,构造)
- HDU 5950 Recursive sequence(矩阵快速幂)
- HDU 5950 Recursive sequence(矩阵快速幂)
- HDU 5950 Recursive sequence(矩阵快速幂)
- hdu 5950 Recursive sequence (矩阵快速幂)
- Recursive sequence HDU --- 5950 【公式矩阵快速幂】
- hdu 5950 Recursive sequence(递推 快速幂矩阵)
- hdu 1590(Recursive sequence)矩阵快速幂
- (矩阵快速幂)hdu5950 Recursive sequence
- 2016 沈阳 1003 Recursive sequence(hdu 5950)矩阵快速幂
- HDU 5950 Recursive sequence(矩阵)
- hdu 5950 Recursive sequence(矩阵快速幂,经典矩阵构造方法)
- UDP服务器端程序设计
- P_y_Q_t_5 和 E_r_i_c_6
- 暂存
- 交叉验证
- python-pandas的基本用法07
- HDU 5950 Recursive sequence(矩阵快速幂)
- Java反射-使用Field类来操作类的成员变量(Field)
- href和src的区别
- LCM
- QSqlQuery简单使用
- poj1995 Raising Modulo Numbers
- 【CSS布局模型】流动模型、浮动模型、层模型
- 了解Angular
- CodeForces 416C:Booking System(贪心)