poj 3233——Matrix Power Series
来源:互联网 发布:苹果电脑怎么装mac系统 编辑:程序博客网 时间:2024/05/02 02:07
题意:给出矩阵A和整数k,求出S=A+A^2+A^3+……+A^k
思路:矩阵快速幂
错误:前面几次超时,因为取模的次数太多了,因为题目给出了矩阵元素的最大值,所以不用每次乘的时候都对每个数取模,
代码如下:
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn=35;int N,K,M;struct Matrix{ int n; int a[maxn][maxn]; void clear(){ n=0; memset(a,0,sizeof(a)); } Matrix operator +(const Matrix &b)const{ Matrix tmp; tmp.n=n; for(int i=0;i<n;++i){ for(int j=0;j<n;++j){ tmp.a[i][j]=(a[i][j]+b.a[i][j])%M; } } return tmp; } Matrix operator * (const Matrix &b)const{ Matrix tmp; tmp.clear(); tmp.n=n; for(int i=0;i<n;++i){ for(int j=0;j<n;++j){ for(int k=0;k<n;++k){ tmp.a[i][j]+=(a[i][k])*(b.a[k][j]); tmp.a[i][j]%=M; } } } return tmp; } /* Matrix print(){ for(int i=0;i<n;++i){ for(int j=0;j<n;++j){ cout<<a[i][j]<<' '; } cout<<endl; } }*/};Matrix A;Matrix pow(int t){ Matrix tmp; tmp.n=A.n; for(int i=0;i<N;++i){ for(int j=0;j<N;++j){ if(i==j) tmp.a[i][i]=1; else tmp.a[i][j]=0; } } Matrix sav=A; while(t){ if(t&1){ tmp=tmp*sav; } t>>=1; sav=sav*sav; } return tmp;}Matrix solve(int k){ if(k==1)return A; if(k==0){ Matrix tmp; for(int i=0;i<N;++i){ for(int j=0;j<N;++j){ if(i==j)tmp.a[i][i]=1; else tmp.a[i][j]=0; } } return tmp; } Matrix tmp=solve(k>>1); if(k&1){ tmp=tmp+tmp*pow(k>>1); tmp=tmp+pow(k); } else{ tmp=tmp+tmp*pow(k>>1); } return tmp;}int main(){// freopen("data.txt","r",stdin); scanf("%d%d%d",&N,&K,&M); A.clear(); A.n=N; for(int i=0;i<N;++i){ for(int j=0;j<N;++j){ scanf("%d",&A.a[i][j]); } } Matrix ans=solve(K); for(int i=0;i<N;++i){ for(int j=0;j<N-1;++j){ printf("%d ",ans.a[i][j]); } printf("%d\n",ans.a[i][N-1]); } return 0;}
0 0
- poj 3233——Matrix Power Series
- POJ 3233 Matrix Power Series
- POJ 3233Matrix Power Series
- poj 3233 Matrix Power Series
- poj 3233 Matrix Power Series
- Poj 3233 Matrix Power Series
- POJ 3233 Matrix Power Series
- poj 3233 Matrix Power Series
- poj 3233 Matrix Power Series
- POJ 3233 Matrix Power Series
- poj 3233 Matrix Power Series
- poj 3233 Matrix Power Series
- poj 3233 Matrix Power Series
- POJ 3233 Matrix Power Series
- poj 3233:Matrix Power Series
- POJ 3233 Matrix Power Series
- poj 3233 Matrix Power Series
- poj 3233 Matrix Power Series
- 菜鸟面试之路(一)
- perl 中的特殊符号----内置变量
- 支持导出PDF文件并转换成图片格式的PDF查看控件Spire.PDFViewer
- 怎样使viewpager实现循环
- Fix Xcode "Code signing operation failed. Invalid arguments were passed to codesign"
- poj 3233——Matrix Power Series
- Android - - - - - - Sevice
- ArcObjects与ArcGIS Engine
- 【云图】如何设置微信里的全国实体店地图?
- Perl中的grep和map
- 优游平台总代,优游平台总代【总代Q941494533】炎
- hbase条件查询实现理论
- python写的一个时钟程序(指针类的)
- Unix下五种IO模型简介