hdu 1005 矩阵快速幂
来源:互联网 发布:淘宝女装代发货源 编辑:程序博客网 时间:2024/06/02 05:16
题意:A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7。Given A, B, and n, you are to calculate the value of f(n).
分析:
这题以前做过,还写了个题解:hdu 1005
对于这题,主要是将做给的那个公式转化成矩阵的形式。
| f[n] |= |A B|*| f[n-1] |
| f[n-1] | |1 0| | f[n-2] |
#include<iostream>#include<cstdio>#include<cstring>using namespace std;typedef long long ll;const int mod=7;const int N=2;struct Mat{ int mat[N][N];};int n=2,A,B;Mat mul(Mat a,Mat b){ Mat c; memset(c.mat,0,sizeof(c.mat)); for(int k=0;k<n;k++) for(int i=0;i<n;i++) for(int j=0;j<n;j++){ c.mat[i][j]+=a.mat[i][k]*b.mat[k][j]; c.mat[i][j]%=mod; } return c;}Mat qmod(Mat a,int k){ Mat c; for(int i=0;i<n;i++) for(int j=0;j<n;j++) c.mat[i][j]=(i==j); for(;k;k>>=1){ if(k&1)c=mul(c,a); a=mul(a,a); } return c;}int main(){ int k; while(~scanf("%d%d%d",&A,&B,&k)&&(A+B+k)){ if(k==1||k==2){ printf("1\n");continue; } Mat a; a.mat[0][0]=A%mod; a.mat[0][1]=B%mod; a.mat[1][0]=1; a.mat[1][1]=0; Mat c=qmod(a,k-2); printf("%d\n",(c.mat[0][0]+c.mat[0][1])%mod); } return 0;}
0 0
- hdu 1005 矩阵快速幂
- hdu 1005 矩阵快速幂
- HDU-1005(矩阵二分快速幂)
- Hdu 1005 Number Sequence//矩阵快速幂
- hdu 1005 矩阵快速幂模板题
- HDU 1005 Number Sequence(矩阵快速幂)
- HDU-1005- Number Sequence (矩阵快速幂)
- HDU 1005 Number Sequence 矩阵快速幂
- hdu 1005 Number Sequence 构造矩阵 + 矩阵快速幂
- 【矩阵快速幂】hdu 1575
- 【矩阵快速幂】hdu 1757
- hdu 2604 矩阵快速幂
- hdu-1575矩阵快速幂
- hdu 1575 矩阵快速幂
- hdu 1575(矩阵快速幂)
- hdu 3306 矩阵快速幂
- hdu 1757 矩阵快速幂
- hdu 1575 矩阵快速幂
- tableview头视图 和分区头视图
- 大话数据结构 第二章 读书笔记
- [4245]:A Famous Music Composer
- 关于VS中MFC中CString转char *的问题
- 在WAMPSERVER下增加多版本的PHP(PHP5.4,PHP5.6)支持
- hdu 1005 矩阵快速幂
- SDUT 2408 Pick apples 贪心+背包(大容量背包)
- xoj 1172
- 第三章 -寄存器
- CloseableHttpClient
- maven配置setting.xml文件详解
- iOS app 疑问解答
- easyui.min.js 报错rows is undefined
- Hexo安装百度统计流程