高斯消元 Wa #18, #21
查看原帖
高斯消元 Wa #18, #21
519573
Daniel_yao楼主2024/7/17 11:31
#include<bits/stdc++.h>
#define int long long
#define For(i,l,r) for(int i=l;i<=r;++i)
#define FOR(i,r,l) for(int i=r;i>=l;--i)

using namespace std;

const int N = 1e3 + 10;

int n;

double a[N][N];

signed main() {
  ios::sync_with_stdio(0);
  cin.tie(0), cout.tie(0);
  cin >> n;
  For(i,1,n) {
    For(j,1,n+1) {
      cin >> a[i][j];
    }
  }
  for (int i = 1, k = 1; i <= n - 1; ++i, ++k) {
    For(j,i+1,n) if(a[i][k] < a[j][k]) swap(a[i], a[j]);
    For(j,i+1,n) {
      double w = 0;
      if(a[i][k] != 0) w = 1.0 * a[j][k] / a[i][k];
      For(l,k,n+1) {
        a[j][l] -= w * a[i][l];
      }
    }
  }
  for (int i = n, k = n; i >= 2; --i, --k) {
    FOR(j,i-1,1) {
      double w = 0;
      if(a[i][k] != 0) w = a[j][k] / a[i][k];
      For(l,k,n+1) {
        a[j][l] -= w * a[i][l];
      }
    }
  }
  For(i,1,n) {
    For(j,1,n+1) {
      cerr << a[i][j] << ' ';
    }
    cerr << '\n';
  }
  For(i,1,n) {
    int cnt0 = 0;
    For(j,1,n) {
      cnt0 += (a[i][j] == 0);
    }
    if(cnt0 == n) return puts("No Solution"), 0;
  }
  For(k,1,n) {
    printf("%.2lf\n", a[k][n+1] / a[k][k]);
  }
  return 0;
}

/*
9 3       2         2 
0 3.66667 6.77778   2.77778 
0 0       -1.15152  2.75758 


9 0       2         -13.5526 
0 3.66667 0         19.0088 
0 0       -1.15152  2.75758 


 */
2024/7/17 11:31
加载中...