矩阵快速幂--poj3233
来源:互联网 发布:项目数据分析师培训 编辑:程序博客网 时间:2024/05/16 00:46
这个不是直接求矩阵快速幂,是求的和,但可以转化成快速幂。
参见《挑战程序设计竞赛》。
下面是代码:
#include<iostream>#include<set>#include<map>#include<vector>#include<cmath>#include<climits>#include<cstdio>#include<string>#include<cstring>#include<algorithm>typedef long long LL;using namespace std;int n,m,k;typedef vector<int> vec;typedef vector<vec> mat;mat mul(mat &A,mat &B){ mat C(A.size(),vec(A.size())); for(int i=0; i<A.size(); i++) for(int j=0; j<B[0].size(); j++) for(int k=0; k<B.size(); k++) C[i][j]=(C[i][j]+A[i][k]*B[k][j])%m; return C;}mat pow(mat A,LL n){ mat B(A.size(),vec(A.size())); for(int i=0; i<A.size(); i++) B[i][i]=1; while(n>0) { if(n&1) B=mul(B,A); A=mul(A,A); n>>=1; } return B;}void solve(mat A){ mat B(n*2,vec(n*2)); for(int i=0; i<n; i++) { for(int j=0; j<n; j++) B[i][j]=A[i][j]; B[i+n][i]=B[i+n][i+n]=1; } B=pow(B,k+1); for(int i=0; i<n; i++) { for(int j=0; j<n; j++) { int a=B[n+i][j]%m; if(i==j) a=(a+m-1)%m; printf("%d%c",a,j+1==n?'\n':' '); } }}int main(){ //freopen("in.txt","r",stdin); cin>>n>>k>>m; int x; mat A(n,vec(n)); for(int i=0; i<n; i++) for(int j=0; j<n; j++) { cin>>A[i][j]; } solve(A); return 0;}
- POJ3233矩阵快速幂
- 矩阵快速幂--poj3233
- 快速矩阵幂POJ3233
- POJ3233 矩阵快速幂
- poj3233(矩阵快速幂)
- poj3233矩阵快速幂运算
- 【矩阵快速幂】poj3233 Matrix Power Series
- poj3233 - Matrix Power Series-矩阵快速幂
- poj3233 Matrix Power Series,矩阵快速幂
- POJ3233 Matrix Power Series【矩阵快速幂】
- poj3233 Matrix Power Series(矩阵快速幂)
- 【poj3233】Matrix Power Series 矩阵+快速幂
- poj3233经典二分矩阵快速幂
- Matrix Power Series poj3233矩阵快速幂
- [poj3233] Matrix Power Series 矩阵快速幂
- POJ3233(递推+矩阵快速幂)
- POJ3233 矩阵幂求和
- poj3233(矩阵幂)
- 解决gdal集成libkml的链接错误
- ASIHTTPRequest-使用download cache
- Maximum Subarray
- Jquery插件之密码强度检测:passwordStrength
- ASIHTTPRequest-流量控制
- 矩阵快速幂--poj3233
- Subsets
- eclipse和myeclipse关联java jar包以及源文件,doc文件
- ASIHTTPRequest-客户端证书支持
- 数据库的事务和锁
- ASIHTTPRequest-使用代理连接
- WebService应用-ABAP实例:ABAP调用外部WebService
- SQL Server使用Merge语句当源表数据集为空时,无法进行查询的问题
- ASIHTTPRequest-其他特性