这题我已经过了,代码如下:
#include<bits/stdc++.h>
//#include<bits/extc++.h>
//#pragma GCC optimize("Ofast")
#define gt getchar
#define pt putchar
#define y1 y233
#define rep(i,a,b,k) for(int (i)=(a),(_)=(b);(i)<=(_);(i)+=(k))
#define per(i,a,b,k) for(int (i)=(a),(_)=(b);(i)>=(_);(i)-=(k))
#define edgerep(i,h,u,e) for(int (i)=h[(u)];(i);(i)=e[(i)].nxt)
typedef long long ll;
//typedef __int128 lll;
typedef unsigned long long ull;
const int SIZE=405;
const int MOD=1e9+7;
using namespace std;
//using namespace __gnu_pbds;
inline bool __(char ch){return ch>=48&&ch<=57;}
inline ll read(){
ll x=0;bool sgn=0;char ch=gt();
while(!__(ch)){sgn|=(ch=='-');ch=gt();}
while(__(ch)){x=(x<<1)+(x<<3)+(ch-'0');ch=gt();}
return sgn?-x:x;
}
inline void print(ll x){
static char st[70];short top=0;
if(x<0)pt('-'),x=-x;
do{st[++top]=(x%10+'0'),x/=10;}while(x);
while(top)pt(st[top--]);
}
inline void printsp(ll x){
static char st[70];short top=0;
if(x<0)pt('-'),x=-x;
do{st[++top]=(x%10+'0'),x/=10;}while(x);
while(top)pt(st[top--]);pt(32);
}
inline void println(ll x){
static char st[70];short top=0;
if(x<0)pt('-'),x=-x;
do{st[++top]=(x%10+'0'),x/=10;}while(x);
while(top)pt(st[top--]);pt(10);
}
int n;
struct Matrix{
int n,m;
ll val[SIZE][SIZE+SIZE];
Matrix(int _n=0,int _m=0):n(_n),m(_m){memset(val,0,sizeof(val));}
inline void reset(){rep(i,0,n-1,1) rep(j,0,m-1,1) val[i][i]=1;}
inline void clear(){rep(i,0,n-1,1) rep(j,0,m-1,1) val[i][j]=0;}
inline void init(){rep(i,0,n-1,1) rep(j,0,m-1,1) val[i][j]=read();}
}A;
inline ll power(ll a,ll b){
ll res=1;
while(b){
if(b&1)res=res*a%MOD;
a=a*a%MOD,b>>=1;
}
return res;
}
inline void Gauss(){
int curi=0;
rep(j,0,n-1,1){
int t;
for(t=curi;t<n;++t) if(A.val[t][j]!=0)break;
if(t==n)continue;
rep(i,j,n+n-1,1) swap(A.val[t][i],A.val[curi][i]);
ll inv=power(A.val[curi][j],MOD-2);
per(i,n+n-1,j,1) A.val[curi][i]=(A.val[curi][i]*inv)%MOD;
rep(i,0,n-1,1){
if(i==curi)continue;
per(k,n+n-1,j,1) A.val[i][k]=(((A.val[i][k]-A.val[curi][k]*A.val[i][j])%MOD)+MOD)%MOD;
}
curi++;
}
if(curi<n){
rep(i,curi,n-1,1){
if(A.val[i][n]!=0){
printf("No Solution\n");
return;
}
}
printf("No Solution\n");
return;
}
rep(i,0,n-1,1){
rep(j,n,n+n-1,1) printsp(A.val[i][j]);
printf("\n");
}
}
signed main(){
n=read();
A=Matrix(n,n+n);
rep(i,0,n-1,1){
rep(j,0,n-1,1) A.val[i][j]=read();
rep(j,n,n+n-1,1) A.val[i][j]=0;
A.val[i][i+n]=1;
}
Gauss();
return 0;
}
但是我一旦把这个矩阵 A 当成函数的参数传进去,就像这样:
inline void Gauss(Matrix A)
Gauss(A);
本地就会寄(Dev-cpp,一编译就会直接RE),但是交了能过,请问为什么?