高斯消元
struct gauss{
double a[N][N],x[N];
int work(){
int p;
double val;
for(int i=1;i<=n;++i){
p=-1;
for(int j=i;j<=n;++j){
if(a[j][i]!=0)p=j;
}
if(p==-1)return 0;
val=a[p][i];
for(int j=1;j<=n+1;++j){
a[p][j]/=val;
}
swap(a[i],a[p]);
for(int j=i+1;j<=n;++j){
if(a[j][i]!=0){
val=a[j][i];
for(int k=1;k<=n+1;++k){
a[j][k]-=a[i][k]*val;
}
}
}
}
return 1;
}
}f;
行列式
struct det{
int a[N][N];
void clear(){
memset(a,0,sizeof(a));
}
int gauss(int n){
int ret=1;
for(int i=1;i<=n;++i){
for(int j=i+1;j<=n;++j){
while(a[i][i]){
int div=a[i][j]/a[i][i];
for(int k=1;k<=n;++k){
a[j][k]=(a[j][k]+mo-div*a[i][k])%mo;
}
swap(a[i],a[j]),ret=-ret;
}
swap(a[i],a[j]),ret=-ret;
}
}
for(int i=1;i<=n;++i){
ret=ret*a[i][i]%mo;
}
return (ret+mo)%mo;
}
}f;