AcWing 207. 球形空间产生器——和y总不同的方法(高斯-约旦消元法)
原题链接
中等
作者:
橙柚哥哥
,
2024-12-22 20:05:01
,
所有人可见
,
阅读 2
求赞!
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=15;
ll n;
double p[N][N],a[N][N];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
for(ll i=1; i<=n+1; ++i)
for(ll j=1; j<=n; ++j) cin>>p[i][j];
for(ll i=1; i<=n; ++i)
for(ll j=1; j<=n; ++j) {
a[i][j]=2*(p[i+1][j]-p[i][j]);
a[i][n+1]+=p[i+1][j]*p[i+1][j]-p[i][j]*p[i][j];
}
for(ll i=1; i<=n; ++i) {
ll r=i;
for(ll j=i+1; j<=n; ++j) if(fabs(a[j][i])>fabs(a[r][i])) r=j;
if(r!=i) swap(a[r],a[i]);
for(ll j=n+1; j>=i; j--) a[i][j]/=a[i][i];
for(ll j=1; j<=n; ++j) {
if(j==i) continue;
double f=a[j][i]/a[i][i];
for(ll k=i; k<=n+1; ++k) a[j][k]-=f*a[i][k];
}
}
for(ll i=1; i<=n; ++i) cout<<fixed<<setprecision(3)<<a[i][n+1]<<" ";
return 0;
}