
#include<bits/stdc++.h>
using namespace std;
const int N = 110;
const double eps = 1e-8;
int n;
double a[N][N];
int gauss(){
int r,c;
for(r=0,c=0;c<n;c++){
int t=r;
for(int i=r+1;i<n;i++)
if(fabs(a[i][c])>fabs(a[t][c])) t=i;
if(fabs(a[t][c])<eps) continue;
for(int i=c;i<n+1;i++) swap(a[r][i],a[t][i]);
for(int i=n;i>=c;i--) a[r][i]/=a[r][c];
for(int i=r+1;i<n;i++){
if(fabs(a[i][c])>eps)
for(int j=n;j>=c;j--) a[i][j]-=a[r][j]*a[i][c];
}
r++;
}
//cout<<r<<endl;
if(r<n){
for(int i=r;i<n;i++){
if(fabs(a[i][n])>eps) return 2;
}
return 1;
}
for(int i=n-1;i>=0;i--){
for(int j=i+1;j<n;j++) a[i][n]-=a[i][j]*a[j][n];
}
return 0;
}
int main(){
cin>>n;
for(int i=0;i<n;i++)
for(int j=0;j<n+1;j++)
cin>>a[i][j];
int res=gauss();
if(res==2) puts("No solution");
else if(res==1) puts("Infinite group solutions");
else{
for(int i=0;i<n;i++)
if(fabs(a[i][n])<eps) puts("0");
else printf("%.2f\n",a[i][n]);
}
return 0;
}

异或:不进位加法
#include<bits/stdc++.h>
using namespace std;
const int N = 110;
int n;
int a[N][N];
int gauss(){
int r,c;
for(r=0,c=0;c<n;c++){
int t=r;
for(int i=r+1;i<n;i++)
if(a[i][c]) t=i;
if(!a[t][c]) continue;
for(int i=c;i<n+1;i++) swap(a[r][i],a[t][i]);
for(int i=r+1;i<n;i++){
if(a[i][c])
for(int j=n;j>=c;j--) a[i][j]-=a[r][j]*a[i][c];
}
for(int i=0;i<n;i++)
for(int j=0;j<n+1;j++) a[i][j]&=1;
r++;
}
//cout<<r<<endl;
if(r<n){
for(int i=r;i<n;i++){
if(a[i][n]) return 2;
}
return 1;
}
for(int i=n-1;i>=0;i--){
for(int j=i+1;j<n;j++) a[i][n]-=a[i][j]*a[j][n];
}
for(int i=0;i<n;i++)
for(int j=0;j<n+1;j++) a[i][j]&=1;
return 0;
}
int main(){
cin>>n;
for(int i=0;i<n;i++)
for(int j=0;j<n+1;j++)
cin>>a[i][j];
int res=gauss();
if(res==2) puts("No solution");
else if(res==1) puts("Infinite group solutions");
else{
for(int i=0;i<n;i++)
cout<<a[i][n]<<endl;
}
return 0;
}