为什么第一个数据下载下来在本机上跑要RE,而且在NOILinux上跑也RE,但提交却能AC?
#include<bits/stdc++.h>
#define int long long
const int MOD=1000000007;
using namespace std;
class Matrix{
private:
int n,m;
int num[101][101];
public:
Matrix(int n,int m){
this->n=n,this->m=m;
}
void SetN(int n){
this->n=n;
}
void SetM(int m){
this->m=m;
}
void SetNum(int i,int j,int x){
this->num[i][j]=x;
}
void NumUp(int i,int j,int x){
this->num[i][j]=this->num[i][j]+x;
}
int GetNum(int i,int j){
return num[i][j];
}
void Read(){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf("%lld",&num[i][j]);
}
}
}
void Write(){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
printf("%lld ",num[i][j]);
}
putchar('\n');
}
}
Matrix operator *(Matrix x){
int am=this->m,an=this->n,bm=x.m,bn=x.n;
Matrix ans(an,bm);
for(int i=1;i<=an;i++){
for(int j=1;j<=bm;j++){
ans.SetNum(i,j,0);
for(int k=1;k<=am;k++){
ans.NumUp(i,j,((this->GetNum(i,k))*(x.GetNum(k,j)))%MOD);
ans.SetNum(i,j,ans.GetNum(i,j)%MOD);
}
}
}
return ans;
}
};
Matrix Pow(Matrix x,int k){
if(k==1)return x;
Matrix ans=Pow(x,k>>1);
ans=ans*ans;
if(k%2==1)ans=ans*x;
return ans;
}
signed main(){
int n,k;
scanf("%lld%lld",&n,&k);
Matrix a(n,n);
a.Read();
Pow(a,k).Write();
return 0;
}