想知道如果这题矩阵大一点,比如700*700之后在函数里定义矩阵就会爆掉,我只知道在外面定义,但是这样就会很丑,想知道如何写能够更简便
本人代码(100*100)求教谢谢:
#include<bits/stdc++.h>
#define int long long
#define inf 1e18
#define inc 0xcfcfcfcf
#define N 107
#define M 500007
#define mod 1000000007
//#pragma GCC optimize(2)
//#pragma GCC optimize(3)
using namespace std;
int T=1,n,k;
struct Mrx
{
int g[N][N];
void Init_Z()
{
memset(g,0,sizeof(g));
}
void Init_E()
{
memset(g,0,sizeof(g));
for(int i=1;i<=n;++i)
g[i][i]=1;
}
Mrx operator * (const Mrx x) const
{
Mrx y;
y.Init_Z();
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
for(int k=1;k<=n;++k)
y.g[i][j]+=g[i][k]*x.g[k][j]%mod,y.g[i][j]%=mod;
return y;
}
};
Mrx Pow_mrx(Mrx x,int k)
{
Mrx ans;
ans.Init_E();
while(k>0)
{
if(k&1)
ans=ans*x;
x=x*x;
k>>=1;
}
return ans;
}
bool Solve()
{
//freopen("test.in","r",stdin);
scanf("%lld%lld",&n,&k);
Mrx a;
a.Init_Z();
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
scanf("%lld",&a.g[i][j]);
Mrx ans=Pow_mrx(a,k);
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)
printf("%lld ",ans.g[i][j]);
printf("\n");
}
return true;
}
signed main()
{
//scanf("%lld",&T);
while(T--)
if(!Solve())
printf("-1\n");
return 0;
}
/*
-std=c++11
-std=c99
*/