POJ 3233 等比矩陣的前N項和

來源:互聯網
上載者:User

第二次做這個題了,猶豫再三還是交了,果斷秒A,嘿嘿~感覺不錯啊~

下面說一下思路:

對原矩陣A構造一個2n*2n的方陣。E為單位矩陣,0為0矩陣。

| A E |

| 0 E |

這個矩陣的平方為:

| A^2 A+E |

| 0      E      |

右上方的A+E就是A^1+A^0就是前兩項的和。

通過這個構造矩陣的K次方,右上方的N階矩陣就是前K項和,這前K項其實是0-K-1項。

我們要的是1-K項。K++再減去E就是結果了。

話說以前我寫這題用了...... 170line??弱爆了!

#include<iostream>#include<cstdio>#include<string.h>using namespace std;__int64 matrix[66][66];__int64 n,k,mod;void matriXmult( __int64 a[][66],__int64 b[][66] ){  __int64 c[66][66];  memset( c,0,sizeof(c) );  for( int i=0;i<2*n;i++ )  for( int j=0;j<2*n;j++ )  for( int k=0;k<2*n;k++ )    c[i][j]+=a[i][k]*b[k][j];  for( int i=0;i<2*n;i++ )  for( int j=0;j<2*n;j++ )    a[i][j]=c[i][j]%mod;}void matrix_Power( __int64 m[][66],int k ){  k++;  __int64 res[66][66],temp[66][66];  memset( res,0,sizeof(res) );  memset( temp,0,sizeof(temp) );  for( int i=0;i<2*n;i++ ){    res[i][i]=1;    for( int j=0;j<2*n;j++ )       temp[i][j]=matrix[i][j];     }     for( int i=0;i<32;i++ ){    if( k&(1<<i) )     matriXmult( res,temp );  matriXmult( temp,temp ); } for( int i=0;i<2*n;i++ ) for( int j=0;j<2*n;j++ )   if( i==(j-n) )     m[i][j]=(res[i][j]-1+mod)%mod;   else     m[i][j]=(res[i][j]+mod)%mod;}int main(){ while( scanf("%I64d%I64d%I64d",&n,&k,&mod)!=EOF ) {    memset( matrix,0,sizeof(matrix) );    for( int i=0;i<n;i++ )    for( int j=0;j<n;j++ )    scanf( "%I64u",&matrix[i][j] );    for( int i=n;i<2*n;i++ )    matrix[i][i]=matrix[i-n][i]=1;    matrix_Power(matrix,k);    for( int i=0;i<n;i++ )    {    printf( "%I64d",matrix[i][n] );    for( int j=n+1;j<2*n;j++ )     printf( " %I64d",matrix[i][j] );    printf( "\n" );   }  } return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.