记录编号 190673 评测结果 AAAAAAAAAAAAA
题目名称 [SDOI 2007] 线性方程组 最终得分 100
用户昵称 Gravatarassassain 是否通过 通过
代码语言 C++ 运行时间 0.003 s
提交时间 2015-10-04 07:12:10 内存使用 0.32 MiB
显示代码纯文本
#include<cstdio>

using namespace std;

int n;
double ans[60], a[60][60];

double ABS(double x) { return x>0?x:-x; }

void SP(double &x, double &y) {
	double c = x;
	x = y;
	y = c;
	return;
}

int GAOSI() {
	int i, col;
	for(i = 1, col = 1 ; col <= n ; ++ i, ++ col) {
		//printf("i = %d\n", i);
		int mx = i;
		for(int j = i+1 ; j <= n ; ++ j) {
			if(ABS(a[j][col])>ABS(a[mx][col])) {
				mx = j;
			}
		}
		if(mx!=i) {
			for(int j = col ; j <= n+1 ; ++ j) {
				SP(a[i][j], a[mx][j]);
			}
		}
		if(ABS(a[i][col])<0.00001) {
			-- i;
			continue;
		}
		for(int j = i+1 ; j <= n ; ++ j) {
			if(!(ABS(a[j][col])<0.00001)) {
				double g = -(a[j][col]/a[i][col]);
				for(int k = col ; k <= n+1 ; ++ k) {
					a[j][k] += g*a[i][k];
				}
			}
		}
		//printf("	I = %d\n", i);
	}--i;
/*	for(int k = 1 ; k <= n ; ++ k) {
		for(int l = 1 ; l <= n+1 ; ++ l) {
			printf("a[%d][%d] = %.2lf\n", k, l, a[k][l]);
		}
	}//
*/	for(int j = i ; j <= n ; ++ j) {
		if(ABS(a[j][n])<0.00001&&!(ABS(a[j][n+1]<0.00001))) {
			return -1;
		}
	}//printf("i = %d\n", i);
	if(i!=n) {
		return -2;
	}//printf("2222222222");
	for(int j = i ; j >= 1 ; -- j) {
		double tmp = a[j][n+1];
		for(int k = j+1 ; k <= n ; ++ k) {
			tmp -= ans[k]*a[j][k];
		}
		ans[j] = tmp/a[j][j];
	}
	return 1;
}

int main() {
	freopen("gaess.in", "r", stdin);
	freopen("gaess.out", "w", stdout);
	scanf("%d", &n);
	for(int i = 1 ; i <= n ; ++ i) {
		for(int j = 1 ; j <= n+1 ; ++ j) {
			scanf("%lf", &a[i][j]);
		}
	}
	int fm = GAOSI();
	if(fm == -1) {
		printf("-1");
	} else {
		if(fm == -2) {
			printf("0");
		} else {
			for(int i = 1 ; i <= n ; ++ i) {
				printf("x%d=", i);
				if(ABS(ans[i]-0)<0.00001) {
					printf("0\n");
				} else {
					printf("%.2lf\n", ans[i]);
				}
			}
		}
	}
	getchar();
	getchar();
	return 0;
}