在洛谷上测试还好一些,但是去其他数据强一些的OJ测试基本都在超时边缘徘徊,求大佬解释?
#include<cstdio>
#include<iostream>
#include<string.h>
using namespace std;
const long long N = 105;
long long l, qow, mod = 1e9+7;
struct matrix{
long long n, m, z[N][N];
matrix()
{
n = m = 0;
for (int i = 1; i < N; i++)
for (int j = 1; j < N;j++)
z[i][j] = 0;
}
void input_c(){
n = m = l;
for(long long i = 1; i <= n; i++)
for(long long j = 1; j <= m; j++)
scanf("%lld",&z[i][j]);
}
void input_s(){
n = m = l;
for(long long i = 1;i <= n; i++) z[i][i] = 1;
}
void output(){
for(long long i = 1; i <= n; i++){
for(long long j = 1; j <= m; j++)
printf("%lld ",z[i][j]);
printf("\n");
}
}
}a;
matrix operator*(const matrix &a, const matrix &b){
matrix c;
c.n = c.m = l;
for(long long i = 1; i <= c.n; i++)
for(long long j = 1; j <= c.m; j++)
for(long long k = 1; k <= a.m; k++)
c.z[i][j] = (c.z[i][j] + a.z[i][k] * b.z[k][j]) % mod;
return c;
}
matrix Qpower(matrix a, long long k){
matrix ans;
ans.m = ans.n = a.n;
ans.input_s();
while(k > 0){
if(k & 1) ans = ans * a;
a = a * a;
k >>= 1;
}
return ans;
}
int main(){
scanf("%lld%lld",&l,&qow);
a.input_c();
matrix b = Qpower(a, qow);
b.output();
return 0;
}