POJ 3233 等比矩阵的前N项和

原创 2012年03月30日 13:50:25

第二次做这个题了,犹豫再三还是交了,果断秒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;
}


版权声明:本文为博主原创文章,转载请写明出处。

相关文章推荐

poj3233Matrix Power Series (等比矩阵求和)

对于整数的等比数列求和,有: 设S[n]=a+a^2+a^3+...a^n (n==0)S[n]=1 (n为偶数) S[n]=( a^(n/2)+1 )*S[n/2] (n为奇数) S[n]=( a...

poj3233 等比矩阵二分求和

题意:给定矩阵A 求A+A^2+A^3+.......+A^k 如何转化 令SUM(k)==A+A^2+A^3+.......+A^k 则SUM(k)=(1 + A^(k/2) )  ...
  • hyc10
  • hyc10
  • 2017年05月19日 21:11
  • 61

poj 3233 Matrix Power Series(等比矩阵求和)

poj 3233 Matrix Power Series

POJ 3233-Matrix Power Series 详细题解 (等比矩阵)

Matrix Power Series Time Limit: 3000MS   Memory Limit: 131072K Total Submissions: 20309   Acce...

poj 3233 Matrix Power Series 构造矩阵求等比矩阵和

Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 + … + Ak. Input ...

POJ 3233 Matrix Power Series 【矩阵快速幂+等比矩阵】

题目连接 : http://poj.org/problem?id=3233——————————————————-Matrix Power Series Time Limit: 3000MS ...

矩阵经典题目三:poj 3233 Matrix Power Series(等比矩阵求和)

http://poj.org/problem?id=3233 ps转: 用二分方法求等比数列前n项和:即   原理:   (1)若n==0   (2)若n%2==0     ...

POJ3233 矩阵的N次幂求和 二分

k 为偶数:A^k = A ^(k/2) * A ^(k/2); k 为奇数: A^k = A ^ (k/2) * A^(k/2) * A    n  = 2k 为偶数 A^1 + ...

《挑战程序设计竞赛》3.4.2 动态规划-矩阵幂 POJ3070 3734 3233 2663 3420 3735

POJ3070http://ac.jobdu.com/problem.php?pid=3070题意求斐波那契数列第n项的值对10^4取余的结果。思路由于n很大,常见的数组递推肯定是不行的。要用矩阵幂来...

POJ 3233 Matrix Power Series(矩阵的快速幂)

Matrix Power Series Time Limit: 3000MS   Memory Limit: 131072K Total Submissions: 17...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ 3233 等比矩阵的前N项和
举报原因:
原因补充:

(最多只允许输入30个字)