矩阵乘法(POJ 3233 Matrix Power Series )
来源:互联网 发布:网络借贷平台排名 编辑:程序博客网 时间:2024/06/13 07:44
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
using namespace std;
int i,j,k,n,mod;
struct Matrix{
int matrix[50][50];
Matrix (int a=0){
memset(matrix,0,sizeof(matrix));
if(a==1){
for(int i=0;i<50;i++)
matrix[i][i]=1;
}
}
}m;
Matrix operator * (Matrix a,Matrix b){ //???¨®¨®¨°
Matrix res;
memset(res.matrix,0,sizeof(res.matrix));
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int k=1;k<=n;k++)
res.matrix[i][j]=(res.matrix[i][j]+(a.matrix[i][k]*b.matrix[k][j])%mod)%mod;
return res;
}
Matrix operator + (Matrix a,Matrix b){ //???
Matrix res;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
res.matrix[i][j]=(a.matrix[i][j]+b.matrix[i][j])%mod;
return res;
}
Matrix operator ^ (Matrix a,int k){ //???¨®¨®¨°???Y
bool flag=false;
Matrix ans=1;
while(k){
if(k&1){
if(flag)ans=ans*a;
else ans=a;
flag=true;
}
a=a*a;
k>>=1;
}
return ans;
}
Matrix sum(int k){
if(k==1)return m;
else{
Matrix tmp=sum(k>>1);
if(k&1){
Matrix tmp2=m^(k>>1|1);
return tmp2+tmp+tmp*tmp2;//tmp=s[i]
}
else{
Matrix tmp2=m^(k>>1);
return tmp+tmp*tmp2;
}
}
}
int main(){
scanf("%d%d%d",&n,&k,&mod);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++){
scanf("%d",&m.matrix[i][j]);
m.matrix[i][j]%=mod;
}
Matrix ans;
ans=sum(k);
for(i=1;i<=n;i++,puts(""))
for(j=1;j<=n;j++)
printf("%d ",ans.matrix[i][j]);
return 0;
}
#include<cstdlib>
#include<cstring>
#include<iostream>
using namespace std;
int i,j,k,n,mod;
struct Matrix{
int matrix[50][50];
Matrix (int a=0){
memset(matrix,0,sizeof(matrix));
if(a==1){
for(int i=0;i<50;i++)
matrix[i][i]=1;
}
}
}m;
Matrix operator * (Matrix a,Matrix b){ //???¨®¨®¨°
Matrix res;
memset(res.matrix,0,sizeof(res.matrix));
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int k=1;k<=n;k++)
res.matrix[i][j]=(res.matrix[i][j]+(a.matrix[i][k]*b.matrix[k][j])%mod)%mod;
return res;
}
Matrix operator + (Matrix a,Matrix b){ //???
Matrix res;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
res.matrix[i][j]=(a.matrix[i][j]+b.matrix[i][j])%mod;
return res;
}
Matrix operator ^ (Matrix a,int k){ //???¨®¨®¨°???Y
bool flag=false;
Matrix ans=1;
while(k){
if(k&1){
if(flag)ans=ans*a;
else ans=a;
flag=true;
}
a=a*a;
k>>=1;
}
return ans;
}
Matrix sum(int k){
if(k==1)return m;
else{
Matrix tmp=sum(k>>1);
if(k&1){
Matrix tmp2=m^(k>>1|1);
return tmp2+tmp+tmp*tmp2;//tmp=s[i]
}
else{
Matrix tmp2=m^(k>>1);
return tmp+tmp*tmp2;
}
}
}
int main(){
scanf("%d%d%d",&n,&k,&mod);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++){
scanf("%d",&m.matrix[i][j]);
m.matrix[i][j]%=mod;
}
Matrix ans;
ans=sum(k);
for(i=1;i<=n;i++,puts(""))
for(j=1;j<=n;j++)
printf("%d ",ans.matrix[i][j]);
return 0;
}
1 0
- 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(矩阵乘法·二分等比数列)
- 3233 Matrix Power Series 矩阵乘法
- Matrix Power Series(乘法矩阵)
- 矩阵乘法 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 (构造矩阵)
- 使用react-native,reduce开发简洁且的上拉刷新下拉加载更多的组件
- 去掉字符串最后一个字符
- [概率DP] Codeforces 453A Little Pony and Expected Maximum
- TreeMap源码解析
- 用80/20法则迅速拓展程序员学习的广度
- 矩阵乘法(POJ 3233 Matrix Power Series )
- 新手上路,对java的肤浅理解,探讨交流
- linux下ip冲突检测
- Oracle基本语法&&函数&&子查询&&分页查询&&排序&&集合操作&&高级分组函数
- 栈(stack )数据结构
- 第四天
- OpenGL Android简单教程的ppt,有部分说明
- Hust oj 1953 RSA验证(快速幂)
- 信息收集 2:路由分析