woj 1540 Fibonacci 矩阵快速幂
来源:互联网 发布:实况泽罗伯托巅峰数据 编辑:程序博客网 时间:2024/05/22 11:31
题目地址:戳这里
求Fibonacci数列前n项的立方和。
比赛的时候.. 构造一个10*10的矩阵 跪了,很多无用信息:
代码:
#include<iostream>using namespace std;const int mod=1000000007;struct Matrix{ long long p[10][10]; };Matrix multi(Matrix A,Matrix B){ Matrix ans; long long sum=0; for(int i=0;i<10;i++) for(int j=0;j<10;j++) { sum=0; for(int k=0;k<10;k++) sum=(sum+(A.p[i][k]*B.p[k][j])%mod)%mod; ans.p[i][j]=sum; } return ans;}Matrix quick_mod(Matrix A,int n){ Matrix ans; for(int i=0;i<10;i++) for(int j=0;j<10;j++) ans.p[i][j]=(i==j?1:0); while(n>0) { if(n&1) { ans=multi(ans, A); } n>>=1; A=multi(A, A); } return ans; }int main(){ int n; while (cin>>n) { if(!n) break; if(n==1) cout<<1<<endl; else if(n==2) cout<<2<<endl; else { Matrix ans; for(int i=0;i<10;i++) for(int j=0;j<10;j++) ans.p[i][j]=0; ans.p[0][1]=1; ans.p[1][0]=1; ans.p[1][1]=1; ans.p[2][3]=1; ans.p[3][3]=1; ans.p[3][4]=2; ans.p[4][3]=1; ans.p[4][4]=1; ans.p[5][5]=2; ans.p[5][6]=1; ans.p[5][8]=1; ans.p[6][5]=1; ans.p[6][8]=1; ans.p[7][8]=1; ans.p[8][5]=3; ans.p[8][6]=3; ans.p[8][7]=1; ans.p[8][8]=1; ans.p[9][8]=1; ans.p[9][9]=1; ans=quick_mod(ans, n-1); // for(int i=0;i<3;i++) // { // for(int j=0;j<3;j++) // { // cout<<ans.p[i][j]<<' '; // } // cout<<endl; // // } long long result=0; for(int i=0;i<10;i++) result=(result+ans.p[9][i])%mod; cout<<result<<endl; } }}
2 实际上5*5 就可以了
#include<iostream>using namespace std;const int mod=1000000007;struct Matrix{ long long p[5][5]; };Matrix a;Matrix multi(Matrix A,Matrix B){ Matrix ans; long long sum=0; for(int i=0;i<5;i++) for(int j=0;j<5;j++) { sum=0; for(int k=0;k<5;k++) sum=(sum+(A.p[i][k]*B.p[k][j])%mod)%mod; ans.p[i][j]=sum; } return ans;}Matrix quick_mod(Matrix A,int n){ Matrix ans; for(int i=0;i<5;i++) for(int j=0;j<5;j++) ans.p[i][j]=(i==j?1:0); while(n>0) { if(n&1) { ans=multi(ans, A); } n>>=1; A=multi(A, A); } return ans; }int main(){ int n; while (cin>>n) { if(!n) break; if(n==1) cout<<1<<endl; else if(n==2) cout<<2<<endl; else { Matrix ans; for(int i=0;i<5;i++) for(int j=0;j<5;j++) ans.p[i][j]=0; ans.p[0][1]=1; ans.p[1][0]=1; ans.p[1][1]=1; ans.p[1][2]=3; ans.p[1][3]=3; ans.p[2][1]=1; ans.p[2][3]=1; ans.p[3][1]=1; ans.p[3][2]=1; ans.p[3][3]=2; ans.p[4][1]=1; ans.p[4][4]=1; ans=quick_mod(ans, n-1); long long result=0; for(int i=0;i<5;i++) result=(result+ans.p[4][i])%mod; cout<<result<<endl; } }}
0 0
- woj 1540 Fibonacci 矩阵快速幂
- WOJ 654 递推+矩阵快速幂
- 【矩阵快速幂】Fibonacci
- Fibonacci 矩阵快速幂
- Fibonacci 矩阵快速幂
- Fibonacci (矩阵快速幂)
- Fibonacci 快速幂矩阵
- poj3070 Fibonacci 矩阵快速幂
- 3070Fibonacci{矩阵快速幂}
- poj3070 Fibonacci 矩阵快速幂
- POJ - Fibonacci 【快速幂 + 矩阵】
- 矩阵快速幂求Fibonacci
- POJ3070 - Fibonacci - 矩阵快速幂
- UVA10229Modular Fibonacci(矩阵快速幂)
- POJ3070 Fibonacci(矩阵快速幂)
- fibonacci数列矩阵快速幂
- 3070 Fibonacci 矩阵快速幂
- poj3070 Fibonacci(矩阵快速幂)
- Oracle的pipelined函数提升数据输出性能
- OSX:一个有关AirPrint,DNS,Bonjour的文章连接
- hdu 1087 Super Jumping! Jumping! Jumping!
- saltstack入门文档
- DBUtils – BeanProcessor扩展,支持自定义字段映射
- woj 1540 Fibonacci 矩阵快速幂
- Windows驱动中的Crash回调
- USCOJ 1063: 外星人的密码数字(1.0版本)
- sqlmap简介
- uvc
- 关于Ubuntu环境变量
- 布局——基本约束
- 妙味云课堂之css:定位与层级
- 基础加强-类加载器