rt,不知道为什么 RE
#include<bits/stdc++.h>
using namespace std;
#define ll long long
struct frac{
long long fenzi,fenmu;
bool neg;
frac(long long _fenzi=0,long long _fenmu=1){
fenzi=_fenzi;
if(fenzi<0) fenzi=-fenzi,neg=!neg;
fenmu=_fenmu;
if(fenmu<0) fenmu=-fenmu,neg=!neg;
}
};
ll gcd(ll a,ll b);
ll lcm(ll a,ll b);
frac add(frac a,frac b);
frac add(frac a,long long b);
frac add(long long a,frac b);
frac erase(frac a,frac b);
frac erase(frac a,long long b);
frac erase(long long a,frac b);
frac times(frac a,frac b);
frac times(frac a,long long b);
frac times(long long a,frac b);
frac div(frac a,frac b);
frac div(frac a,long long b);
frac div(long long a,frac b);
void out(frac a,bool flag);
frac yuefen(frac a);
frac a[105][105];
int n,m;
bool gaosi(){
int now=1,to;
frac t;
for(int i=1; i<=n; i++){
for(to=now; to<=n; to++){
if(a[to][i].fenzi>0) break;
}
if(to>n) continue;
if(to!=now){
for(int j=1; j<=m;j++){
swap(a[to][j],a[now][j]);
}
}
t=a[now][i];
for(int j=1; j<=m; j++) a[now][j]=div(a[now][j],t);
for(int j=1; j<=n; j++){
if(j==now) continue;
t=a[j][i];
for(int k=1; k<=m; k++){
a[j][k]=erase(a[j][k],times(t,a[now][k]));
}
}now++;
}
return now>n;
}
int main(){
cin>>n;
m=n+1;
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
int x;
cin>>x;
a[i][j].fenzi=x;
a[i][j].fenmu=1;
}
}
if(gaosi()){
for(int i=1; i<=n; i++){
out(a[i][m],1);
cout<<"\n";
}
}
else cout<<"No Solution";
return 0;
}
ll gcd(ll a,ll b){
return a%b==0?b:gcd(b,a%b);
}
ll lcm(ll a,ll b){
return a/gcd(a,b)*b;
}
void out(frac a,bool flag){
if(flag==0){
if(a.fenzi==0) cout<<0;
else{
if(a.neg==1) cout<<"-";
if(a.fenmu==1) cout<<a.fenzi;
else cout<<"\\frac{"<<a.fenzi<<"}{"<<a.fenmu<<"}";
}
}
else{
if(a.neg==1) cout<<"-";
printf("%.2lf",a.fenzi*1.00000000/a.fenmu);
}
}
frac yuefen(frac a){
if(a.fenzi==0){
return frac(0,1);
}
else{
ll k=gcd(a.fenzi,a.fenmu);
a.fenzi/=k;
a.fenmu/=k;
return a;
}
}
frac add(frac a,frac b){
if(a.neg==0&&b.neg==0){
ll c=lcm(a.fenmu,b.fenmu);
ll d=c/a.fenmu,e=c/b.fenmu;
a.fenzi*=d;
a.fenmu*=d;
b.fenzi*=e;
b.fenmu*=d;
a.fenzi+=b.fenzi;
return yuefen(a);
}
else if(a.neg==1&&b.neg==0){
a.neg=0;
return erase(b,a);
}
else if(a.neg==0&&b.neg==1){
b.neg=0;
return erase(a,b);
}
else{
ll c=lcm(a.fenmu,b.fenmu);
ll d=c/a.fenmu,e=c/b.fenmu;
a.fenzi*=d;
a.fenmu*=d;
b.fenzi*=e;
b.fenmu*=d;
a.fenzi+=b.fenzi;
return yuefen(a);
}
}
frac add(frac a,long long b){
frac c(b,1);
return add(a,c);
}
frac add(long long a,frac b){
frac c(a,1);
return add(c,b);
}
frac erase(frac a,frac b){
if(a.neg==0&&b.neg==0){
ll c=lcm(a.fenmu,b.fenmu);
ll d=c/a.fenmu,e=c/b.fenmu;
a.fenzi*=d;
a.fenmu*=d;
b.fenzi*=e;
b.fenmu*=d;
if(a.fenzi>=b.fenzi) a.fenzi-=b.fenzi;
else{
a.neg=1;
a.fenzi=b.fenzi-a.fenzi;
}
return yuefen(a);
}
else if(a.neg==1&&b.neg==0){
a.neg=0;
a=add(a,b);
a.neg=1;
return yuefen(a);
}
else if(a.neg==0&&b.neg==1){
b.neg=0;
return add(a,b);
}
else{
ll c=lcm(a.fenmu,b.fenmu);
ll d=c/a.fenmu,e=c/b.fenmu;
a.fenzi*=d;
a.fenmu*=d;
b.fenzi*=e;
b.fenmu*=d;
if(a.fenzi>=b.fenzi) a.fenzi-=b.fenzi;
else{
a.neg=0;
a.fenzi=b.fenzi-a.fenzi;
}
return yuefen(a);
}
}
frac erase(frac a,long long b){
frac c(b,1);
return erase(a,c);
}
frac erase(long long a,frac b){
frac c(a,1);
return erase(c,b);
}
frac times(frac a,frac b){
if(a.neg==0&&b.neg==0){
a.fenmu*=b.fenmu;
a.fenzi*=b.fenzi;
return yuefen(a);
}
else if(a.neg==1&&b.neg==0){
a.fenmu*=b.fenmu;
a.fenzi*=b.fenzi;
return yuefen(a);
}
else if(a.neg==0&&b.neg==1){
a.fenmu*=b.fenmu;
a.fenzi*=b.fenzi;
a.neg=1;
return yuefen(a);
}
else{
a.fenmu*=b.fenmu;
a.fenzi*=b.fenzi;
a.neg=0;
return yuefen(a);
}
}
frac times(frac a,long long b){
frac c(b,1);
return times(a,c);
}
frac times(long long a,frac b){
frac c(a,1);
return times(c,b);
}
frac div(frac a,frac b){
swap(b.fenmu,b.fenzi);
return times(a,b);
}
frac div(frac a,long long b){
frac c(b,1);
return div(a,c);
}
frac div(long long a,frac b){
frac c(a,1);
return div(c,b);
}