设为首页 加入收藏

TOP

hdu 4990 Reading comprehension (矩阵快速幂)
2015-07-20 17:43:59 来源: 作者: 【 】 浏览:4
Tags:hdu 4990 Reading comprehension 矩阵 快速
//f[n]=2*f[n-2]+f[n-1]+1
//矩阵快速幂
# include
  
   
# include
   
     # include
    
      # include
     
       using namespace std; struct node { __int64 m[3][3]; }; __int64 mod; node answ,origin,d; node f(node a,node b) { __int64 i,j,k; node c; for(i=0; i<3; i++) { for(j=0; j<3; j++) { c.m[i][j]=0; for(k=0; k<3; k++) { c.m[i][j]+=(a.m[i][k]*b.m[k][j])%mod; c.m[i][j]%=mod; } } } return c; } node quick(node answ,node origin,__int64 n) { while(n) { if(n%2) answ=f(answ,origin); origin=f(origin,origin); n/=2; } return answ; } int main() { __int64 i,j,n; while(~scanf("%I64d %I64d",&n,&mod)) { memset(answ.m,0,sizeof(answ.m)); memset(d.m,0,sizeof(d.m)); memset(origin.m,0,sizeof(origin.m)); for(i=0; i<3; i++) answ.m[i][i]=1; d.m[0][0]=1; d.m[0][1]=2; d.m[0][2]=1; origin.m[0][1]=2; origin.m[1][0]=1; origin.m[1][1]=1; origin.m[2][1]=1; origin.m[2][2]=1; if(n==1) printf("%I64d\n",1%mod); else if(n==2) printf("%I64d\n",2%mod); else { answ=quick(answ,origin,n-2); answ=f(d,answ); printf("%I64d\n",answ.m[0][1]%mod); } } return 0; } 
     
    
   
  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Codeforces 292D. Connected Comp.. 下一篇CF282 E Sausage Maximization[tr..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Java后端面试实习自 (2025-12-25 09:24:21)
·Java LTS版本有哪些 (2025-12-25 09:24:18)
·2025年,JAVA还值得 (2025-12-25 09:24:16)
·用 C 语言或者限制使 (2025-12-25 08:50:05)
·C++构造shared_ptr为 (2025-12-25 08:50:01)