POJ 2440 矩阵乘法
来源:互联网 发布:纪念币价格走势软件 编辑:程序博客网 时间:2024/04/28 03:07
请看下面的转换图:
其中红线表示非法转换,蓝线表示合法转换。这样就可以构建4x4的矩阵了。
接下来快速幂...ac。
#include<iostream>#include<cstdio>#include<string.h>using namespace std;struct node{ int m[4][4]; }res,temp,mod;int n;node matriXmult( node a,node b ){ node c; memset( c.m,0,sizeof(c.m) ); for( int i=0;i<4;i++ ) for( int j=0;j<4;j++ ) for( int k=0;k<4;k++ ) c.m[i][j]+=a.m[i][k]*b.m[k][j]; for( int i=0;i<4;i++ ) for( int j=0;j<4;j++ ) c.m[i][j]%=2005; return c;}void matrix_Power(){ memset( res.m,0,sizeof(res.m) ); memset( temp.m,0,sizeof(temp.m) ); for( int i=0;i<4;i++ ) { res.m[i][i]=1; for( int j=0;j<4;j++ ) temp.m[i][j]=mod.m[i][j]; } for( int i=0;i<31;i++ ) { if( n&(1<<i) ) res=matriXmult(res,temp); temp=matriXmult(temp,temp); }}int main(){ memset( mod.m,0,sizeof(mod.m) ); mod.m[0][0]=mod.m[0][1]=mod.m[1][2]=mod.m[1][3]=1;mod.m[2][0]=mod.m[3][2]=1; while( scanf("%d",&n)!=EOF ) { if( n==1 ){ printf("2\n");continue; } if( n==2 ){ printf( "4\n");continue; } n-=2; matrix_Power(); int sum=0; for( int i=0;i<4;i++ ) for( int j=0;j<4;j++ ) sum+=res.m[i][j]; printf( "%d\n",sum%2005 ); }}
- POJ 2440 矩阵乘法
- poj 2440 矩阵乘法
- poj 3070 矩阵乘法
- POJ 3070 矩阵乘法.
- POJ 3233 快速矩阵乘法
- POJ 3734 Blocks 矩阵乘法
- POJ 3735 构造矩阵乘法
- POJ 3420 构造矩阵乘法
- POJ 1977 构造矩阵乘法
- poj 3070 题解 矩阵乘法
- poj 3233 矩阵乘法累加
- POJ 3070 Fibonacci 矩阵乘法
- POJ 3213 PM3 矩阵乘法
- POJ 1070 Fibonacci 矩阵乘法
- poj 3233 矩阵乘法(分块矩阵)
- POJ - 3613 Floyd的思想+矩阵乘法
- poj 3070 Fibonacci (快速矩阵乘法)
- POJ 2778 AC自动机+矩阵乘法
- Silverlight之控件应用总结(一)
- 第七周实验报告(二)
- 加油
- 一起吃饭
- android4.0 systemui启动流程
- POJ 2440 矩阵乘法
- CueClub,这个台球单机游戏不错
- 第7周实验报告3
- 读《我是一只IT小小鸟》笔记
- POJ 1241 Knockout Tournament 树形dp
- hdoj 4203 Doubloon Game(博弈+找规律)
- "Cannot resolve collation conflict for column 1 in SELECT statement."
- 开机只显示桌面不显示图标解决方法
- C排序之快速排序法