hdu1588 Gauss Fibonacci 矩阵快速幂
来源:互联网 发布:java 导入excel xlsx 编辑:程序博客网 时间:2024/06/05 04:21
给定一次函数
求
抄来的latex的写法,哦哟这个公式看起来逼格就是高
根据矩阵乘法的思想,我们可以把
然而我们要求的是若干斐波拉契数的和
所幸的是所求项是有规律的,是从b开始每隔a选中的一个数
上面的矩阵乘法没有保存数,那我们多开个坑保存不就行了
原向量:
修改后:
然后我们修改变换矩阵,使得它能够完成把
原斐波拉契数列变换矩阵
修改后(左上角四个
现在,拿修改后的矩阵去左乘(1),即可得到
这就是 我要的 滑板鞋,哟 哟 哟
回归到题目,给定一次函数
快速幂求出
再快速幂求出
求出
得到向量的Sum位置放着
直接把上题的模板套来用了,我好强啊
main中的内容和步骤是一模一样的
注意long long
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<map>#include<vector>#include<cmath>using namespace std;#define ll long long//Template mat//Interface here#define MULMOD//Use mat(int row,int cow) to define a new EMPTY mat//Use define MULMOD and set MOD to ENABLE MOD#define MAXROWS 4#define MAXCOLS 4#ifdef MULMODint MOD;#endif//Interface Endstruct Matrix{ int Rows,Cols; ll data[MAXROWS][MAXCOLS]; void clear() { memset(data,0,sizeof(data)); } Matrix (int n,int m) :Rows(n),Cols(m) { clear(); } Matrix (int n) :Rows(n),Cols(n) { clear(); for (int i=0;i<n;i++) data[i][i]=1; } ll* operator[](const int n) { return data[n]; } Matrix operator* (const Matrix& ano) const { Matrix result(Rows,ano.Cols); for (int i=0;i<Rows;i++) for (int j=0;j<ano.Cols;j++) for (int k=0;k<Cols;k++) { #ifdef MULMOD result[i][j] += data[i][k] * ano.data[k][j] % MOD; result[i][j]%=MOD; #else result[i][j] += data[i][k] * ano.data[k][j]; #endif } return result; }};Matrix QuickMatrixPow(Matrix to ,int k){ Matrix ans(to.Rows); while (k) { if (k&1) ans=ans*to; k>>=1; to = to*to; } return ans;}//Template mat endint main(){ cin.sync_with_stdio(false); int a,b,n,m; while (cin>>a>>b>>n>>m) { MOD=m; Matrix V0(2,1); V0[0][0]=1; V0[1][0]=0; Matrix R(2,2); R[0][0]=1; R[0][1]=1; R[1][0]=1; R[1][1]=0; Matrix Vb(QuickMatrixPow(R,b)*V0); Vb.Rows=3; //(4) Vb[2][0]=0; //Sum Matrix Ra(QuickMatrixPow(R,a)); Ra.Rows=3; Ra.Cols=3; Ra[2][1]=Ra[2][2]=1; Ra[0][2]=Ra[1][2]=Ra[2][0]=0; cout<< (QuickMatrixPow(Ra,n) * Vb )[2][0] <<endl; }}
0 0
- hdu1588 Gauss Fibonacci (矩阵快速幂)
- hdu1588 Gauss Fibonacci 矩阵快速幂
- HDU1588-Gauss Fibonacci(矩阵快速幂+等比数列二分求和)
- [HDU1588]Gauss Fibonacci(递推+矩阵快速幂)
- HDU1588 Gauss Fibonacci (矩阵快速幂+等比数列二分求和)
- HDU1588 Gauss Fibonacci 矩阵应用
- hdu1588 Gauss Fibonacci(矩阵快速幂+二分求矩阵等比和)
- hdu1588---Gauss Fibonacci(矩阵,线性递推)
- Gauss Fibonacci hdu1588
- hdu1588 Gauss Fibonacci
- HDU1588 Gauss Fibonacci
- HDU 1588 Gauss Fibonacci 矩阵快速幂
- HDU 1588 Gauss Fibonacci(矩阵快速幂)
- 【HDU】1588 Gauss Fibonacci 矩阵快速幂
- Hdoj 1588 Gauss Fibonacci 【矩阵快速幂】
- hdoj-1588-Gauss Fibonacci【矩阵快速幂】
- HDU 1588 Gauss Fibonacci (矩阵乘法+加法+快速幂)
- hdu 1588 Gauss Fibonacci(矩阵快速幂)
- UC浏览器 分享到朋友圈和微信好友
- JSP中<img>标签图片在浏览器中不显示问题
- Hadoop基于Protocol Buffer的RPC实现代码分析-Server端
- Java基础--网络编程之UDP
- css学习笔记——CSS 伪类
- hdu1588 Gauss Fibonacci 矩阵快速幂
- c++ 中__declspec 的用法
- 常见浏览器兼容性问题与解决方案
- Sicily 1814. 日期计算问题
- Centos下Hadoop安装配置
- 设计模式 笔记 状态模式 State
- Java基础--网络编程之TCP
- java中Keytool的使用总结
- jQuery 字符串处理