记录编号 451578 评测结果 AAAAAAAAAAAAA
题目名称 [SDOI 2007] 线性方程组 最终得分 100
用户昵称 GravatarHallmeow 是否通过 通过
代码语言 C++ 运行时间 0.009 s
提交时间 2017-09-17 21:47:45 内存使用 1.00 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define pos(i,a,b) for(int i=(a);i<=(b);i++)
#define pos2(i,a,b) for(int i=(a);i>=(b);i--)
#define N 300
using namespace std;
int n,flag;
double b[N],a[N][N],x[N];
void swap(double &aa,double &bb){
	double temp=aa;
	aa=bb;bb=temp;
}
void guess(){
	int num=1;
	for(int k=1;k<n;k++,num++){
		int im=k;
		pos(i,k,n){
			if(fabs(a[i][k])>fabs(a[im][k])) im=i;
		}
		if(im!=k){
			pos(i,k,n){
				swap(a[num][i],a[im][i]);
			}
			swap(b[num],b[im]);
		}
		if(a[num][k]==0){
			num--;continue;
		}
		pos(i,num+1,n){
			if(a[num][k]==0) continue;
			double t=a[i][k]/a[num][k];
			pos(j,k,n+1){
				a[i][j]-=t*a[k][j];
			}
			b[i]-=t*b[k];
		}
	}
	pos(i,num,n){
		if(a[i][n]==0&&b[i]!=0){
			flag=-1;return;
		}
	}
	pos2(i,n,1){
		pos2(j,n,i+1){
			b[i]-=a[i][j]*x[j];
		}
		if(a[i][i]==0&&b[i]!=0){
			flag=-1;return;
		}
		if(a[i][i]==0&&b[i]==0){
			flag=0;return;
		}
		x[i]=b[i]/a[i][i];
	}
	flag=1;
	return;
}
int main(){
	freopen("gaess.in","r",stdin);
	freopen("gaess.out","w",stdout);
	cin>>n;
	pos(i,1,n){
		pos(j,1,n) cin>>a[i][j];
		cin>>b[i];
	}
	guess();
	if(flag==0||flag==-1){
		cout<<flag;return 0;
	}
	pos(i,1,n){
		if(x[i]==0) printf("x%d=0\n",i);
		else printf("x%d=%.2lf\n",i,x[i]);
	}
	return 0;
}