刚刚接触矩阵乘法和快速幂的蒟蒻,又一次听取WA声一片(全WA)
代码附上,样例能过,测试点全挂
求dalao/神犇帮助
#include <iostream>
#include <cstdio>
using namespace std;
long long n,k;
const long long mod = 1e9+7;
struct square{
long long a[110][110];
long long len;
square(long long k){
len = k;
}
void read(){
for(long long i = 1;i<=len;i++){
for(long long j = 1;j<=len;j++){
scanf("%d",&a[i][j]);
}
}
}
void print(){
for(long long i = 1;i<=len;i++){
for(long long j = 1;j<=len;j++){
printf("%d ",a[i][j]);
}
puts("");
}
}
friend square operator*(square x,square y){
square c(n);
long long l = x.len;
for(long long i = 1;i<=l;i++){
for(long long j = 1;j<=l;j++){
for(long long k = 1;k<=l;k++){
c.a[i][j]+=(x.a[i][k]*y.a[k][j])%mod;
c.a[i][j]%=mod;
}
}
}
return c;
}
};
square fast_pow(square p,long long q){
square ans(n);
for(int i = 1;i<=ans.len;i++)ans.a[i][i] = 1;
square b = p;
while(q){
if(q&1ll)ans=ans*b;
b=b*b;
q>>=1ll;
}
return ans;
}
int main(){
scanf("%d%d",&n,&k);
square asd(n);
asd.read();
square bsd = fast_pow(asd,k);
bsd.print();
return 0;
}