奇怪的问题
查看原帖
奇怪的问题
531930
Southern_Dynasty楼主2022/9/17 14:39

这题我已经过了,代码如下:

#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),但是交了能过,请问为什么?

2022/9/17 14:39
加载中...