记录编号 |
190673 |
评测结果 |
AAAAAAAAAAAAA |
题目名称 |
[SDOI 2007] 线性方程组 |
最终得分 |
100 |
用户昵称 |
assassain |
是否通过 |
通过 |
代码语言 |
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;
}