#include<bits/stdc++.h>
template<class Type,int n,int m>
class matrix{
Type val[n+3][m+3];
void read(){
for(register int i=0;i<n;i++)
for(register int j=0;j<m;j++)
std::cin>>this->val[i][j];
}
void print(){
for(register int i=0;i<n;i++){
for(register int j=0;j<m;j++){
std::cout<<this->val[i][j]<<" ";
}
std::cout<<"\n";
}
}
matrix operator -(){
matrix<Type,n,m> tmp;
for(register int i=0;i<n;i++)
for(register int j=0;j<m;j++)tmp.val[i][j]=-(this->val[i][j]);
return tmp;
}
matrix operator +(matrix b){
matrix<Type,n,m> tmp;
for(register int i=0;i<n;i++)
for(register int j=0;j<m;j++)tmp.val[i][j]=(this->val[i][j]+b.val[i][j]);
return tmp;
}
matrix operator =(matrix b){
for(register int i=0;i<n;i++)
for(register int j=0;j<m;j++)this->val[i][j]=b.val[i][j];
return b;
}
matrix operator +=(matrix b){
this=this+b;
return this;
}
matrix operator -(matrix b){
return this+(-b);
}
matrix operator -=(matrix b){
this=this-b;
return this;
}
matrix operator *(matrix b){
matrix res;
memset(res.val,0,sizeof(res.val));
for(register int i=0;i<n;i++)
for(register int j=0;j<n;j++)
for(register int k=0;k<n;k++)
res.val[i][j]=(res.val[i][j]+(this->val[i][k]%1000000007*b.val[k][j]%1000000007)%1000000007)%1000000007;
return res;
}
matrix operator *=(matrix b){
this=this*b;
return this;
}
matrix operator ^(int y){
matrix res;
res.val[0][0]=-1;
while(y){
if(y&1){
if(res.val[0][0]==-1)res=this;
else res*=this;
}
this*=this;
y>>=1;
}
return res;
}
matrix operator ^=(matrix b){
this=this^b;
return this;
}
};
int main(){
int n,m;
std::cin>>n>>m;
matrix<long long,n,n>x;
x.read();
x^=m;
x.print();
}
有人要求我更新 C%%,然后我写了半天,模板题 CE 了,这是为什么啊(
求调悬关。