poj 3233 Matrix Power Series

这是一道经典的矩阵题:

这个题就是要构造一个矩阵;

A 1   *  A  1  ---> A*A   A + 1  .....  A^k   S(k-1) + 1;

0 1       0  1           0        1              0          1;

View Code
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<queue>
#include<set>
#include<cstring>
#include<vector>
#include<string>
#define LL long long
using namespace std;
int n,m;
void multi( int B[][64], int A[][64] )
{
    int G[64][64]= {0};
    for( int i = 0 ; i < n ; i ++)
       for( int j = 0 ; j < n ; j ++ )
            for( int k = 0 ; k < n ; k ++ )
                 G[i][j] += B[i][k] * A[k][j];        
    for( int i = 0 ; i < n ; i ++ )
       for( int j = 0 ; j < n ; j ++ )
            B[i][j] = G[i][j]%m;    
}
int main( )
{
    int k,A[64][64],B[64][64];
    while( scanf( "%d %d %d",&n,&k,&m )==3 )
    {
          memset( A, 0 ,sizeof( A ) );
          memset( B, 0, sizeof( B ) );
          for( int i = 0; i < n ; i ++ )
          {
              for( int j = 0 ; j < n ; j ++ )
              {
                   scanf( "%d",&A[i][j] );
                   A[i][j] %= m;    
              }
              A[i][i+n] = 1;
              A[i+n][i+n] = 1;
              B[i][i] = 1;
              B[i+n][i+n] =1;
             
          }
          n <<= 1;
          for( int i = 0 ; (1<<i)<=k+1 ; i ++ )
          {
               if( (1<<i)&(k+1) ) multi( B  ,A );
               multi( A , A );        
          }
          int t = n;
          n>>=1;
          for( int i = 0 ;i < n  ; i++ )
          {
               B[i][i+n] = (B[i][i+n] - 1 + m)%m;
               for( int j = n ; j < t ; j ++ )
               printf( j==(t-1)?"%d\n":"%d ",B[i][j]);        
          }
    }
    return 0;    
}

 

转载于:https://www.cnblogs.com/bo-tao/archive/2012/07/25/2608466.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值