这是 P3390 的 AC 代码,但是不知到为什么本机一直编译过不去。
提交记录
#include<cstdio>
#define I inline
#define db double
#define U unsigned
#define Re register
#define ll long long
#define RI register int
#define ull unsigned long long
#define swap(x,y) x^=y^=x^=y;
#define abs(x) ((x)>0?(x):(-(x)))
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define Me(a,b) memset(a,b,sizeof(a))
#define EPS (1e-7)
#define INF (0x7fffffff)
#define LL_INF (0x7fffffffffffffff)
#define MOD 1000000007
#define maxn 139
//#define debug
using namespace std;
#define Type long long
I Type read(){
Type sum=0; int flag=0; char c=getchar();
while((c<'0'||c>'9')&&c!='-') c=getchar(); if(c=='-') c=getchar(),flag=1;
while('0'<=c&&c<='9'){ sum=(sum<<1)+(sum<<3)+(c^48); c=getchar(); }
if(flag) return -sum; return sum;
}
struct Mat{
ll a[maxn][maxn]; int n,m;
Mat operator + (const Mat x) const {
Mat res; RI i,j; res.n=this->n; res.m=this->m;
for(i=1;i<=res.n;i++) for(j=1;j<=res.m;j++) res.a[i][j]=this->a[i][j]+x.a[i][j];
return res;
}
Mat operator - (const Mat x) const {
Mat res; RI i,j; res.n=this->n; res.m=this->m;
for(i=1;i<=res.n;i++) for(j=1;j<=res.m;j++) res.a[i][j]=this->a[i][j]-x.a[i][j];
return res;
}
Mat operator * (const Mat x) const {
Mat res; RI i,k,j,r; res.n=this->n; res.m=x.m;
for(i=1;i<=res.n;i++) for(j=1;j<=res.m;j++) res.a[i][j]=0;
for(i=1;i<=res.n;i++) for(k=1;k<=this->m;k++){
r=this->a[i][k];
for(j=1;j<=res.m;j++) res.a[i][j]+=x.a[k][j]*r,res.a[i][j]%=MOD;
} return res;
}
}a,ans,MarI; int n; ll k;
void getI(){ MarI.n=MarI.m=n; for(RI i=1;i<=n;i++) MarI.a[i][i]=1; return; }
Mat pow(Mat x,ll y){
Mat tmp=x,res=MarI;
while(y){ if(y&1) res=res*tmp; tmp=tmp*tmp; y>>=1; }
return res;
}
int main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
n=read(); k=read(); RI i,j; getI(); a.n=a.m=n; for(i=1;i<=n;i++) for(j=1;j<=n;j++) a.a[i][j]=read();
ans=pow(a,k); for(i=1;i<=n;i++){ for(j=1;j<=n;j++) printf("%lld ",ans.a[i][j]); putchar('\n'); }
return 0;
}
编译器输出:internal complier error: Segmentation fault.
有人知道这是什么原因吗?