西南民大oj(矩阵快速幂)
2014-12-28 13:55
113 查看
我的名字不可能那么难记
时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte总提交 : 16 测试通过 : 9
描述
Nirvava:Hi,Misaki,听说ZC要离开了..
Misaki:好走不送,祝一帆风顺…
Nirvana: 但他留了好多doge给我们…
Misaki:……
Nirvana:而且他们还有名字,名字如下。
#include <cstdio> #include <cstring> #include <cmath> #include <iostream> #include <algorithm> #include <queue> #include <cstdlib> #include <stack> #include <vector> #include <set> #include <map> #define LL long long #define mod 1000000007 #define inf 0x3f3f3f3f #define N 1000010 using namespace std; struct matrix { LL m[3][3]; }; LL n; matrix mult(matrix a,matrix b) { matrix c; memset(c.m,0,sizeof(c.m)); for(int i=0;i<3;i++) for(int k=0;k<3;k++) { if(a.m[i][k]==0)continue; for(int j=0;j<3;j++) { if(b.m[k][j]==0)continue; c.m[i][j]+=a.m[i][k]*b.m[k][j]%mod; c.m[i][j]%=mod; } } return c; } matrix quickmod(matrix a,LL n) { matrix temp; memset(temp.m,0,sizeof(temp.m)); for(int i=0;i<3;i++)temp.m[i][i]=1; while(n) { if(n&1)temp=mult(temp,a); a=mult(a,a); n>>=1; } return temp; } int main() { while(scanf("%lld",&n)!=EOF) { if(n==1){puts("1");continue;} matrix ans; memset(ans.m,0,sizeof(ans.m)); ans.m[0][0]=0;ans.m[0][1]=0;ans.m[0][2]=0; ans.m[1][0]=3;ans.m[1][1]=2;ans.m[1][2]=1; ans.m[2][0]=1;ans.m[2][1]=1;ans.m[2][2]=0; ans=quickmod(ans,n-1); printf("%lld\n",ans.m[1][0]); } }
View Code
相关文章推荐
- hrbust/哈理工oj 1787 New Fibonacci Number【欧拉降幂+矩阵快速幂】
- wmjxoj - 1050: QAQ的公式求解(二)【快速幂 + 矩阵】
- 【九度OJ】1081【矩阵】【快速幂】
- hrbust/哈理工oj 1592 六芒星【矩阵快速幂】
- FZU oj 1683 纪念SlingShot(矩阵快速幂)
- FZU oj 1683 纪念SlingShot(矩阵快速幂)
- hrbust/哈理工oj 1126 Final Destination II【矩阵快速幂+递推】
- 点头OJ 1033 . 骨牌覆盖 V2 ( 状态压缩 + 矩阵快速幂 )
- ACM暑假训练 中石油oj 3737: 礼物(矩阵快速幂)
- 哈理工OJ 1430 神秘植物(矩阵快速幂+矩阵构造)
- hdu 1757 A Simple Math Problem(矩阵快速幂)
- Codeforces 514E Darth Vader and Tree DP + 矩阵快速幂
- HDU 6172 Array Challenge(矩阵快速幂)
- HDU 3936 (矩阵快速幂)
- HDU 4990 Reading comprehension(找规律+矩阵快速幂)
- 矩阵快速幂模板
- hdu 1575 Tr A(矩阵快速幂入门)
- HDU 4990 Reading comprehension(矩阵快速幂优化)
- number number number hdu 6189 矩阵快速幂
- HDU 4565 So Easy! 矩阵快速幂