alg2025/src/2/P3389.cpp
2025-02-12 15:32:42 +08:00

83 lines
1.7 KiB
C++

#include <cmath>
#include <cstdint>
#include <iomanip>
#include <ios>
#include <iostream>
#include <utility>
using ll = int64_t;
template<class T>
T read(){
T t;
std::cin>>t;
return t;
}
constexpr ll maxn = 100;
ll n;
double im[maxn+5][maxn+5],tmp[maxn+5];
void cp(double*f,double*t){
for(ll i=1;i<=n+1;i++){
t[i]=f[i];
}
}
void sp(double*f,double*t){
for(ll i=1;i<=n+1;i++){
std::swap(f[i],t[i]);
}
}
int main(){
std::cin>>n;
for(ll i=1;i<=n;i++){
for(ll j=1;j<=n+1;j++){
std::cin>>im[i][j];
}
}
for(ll i=1;i<=n;i++){
for(ll k=i;k<=n;k++){
if(im[k][i]!=0){
if(k!=i){
sp(im[k],im[i]);
}
break;
}
}
double fact = im[i][i];
for(ll j=1;j<=n+1;j++){
im[i][j]/=fact;
}
for(ll k=1;k<=n;k++){
if(k==i)continue;
double fact = im[k][i];
for(ll j=1;j<=n+1;j++){
im[k][j]-=fact*im[i][j];
}
}
}
if([]()->bool{
for(ll i=1;i<=n;i++){
bool isAllZero=true;
for(ll j=1;j<=n;j++){
if(im[i][j]!=0){
isAllZero=false;
}
}
if(isAllZero){
return false;
}
}
for(ll i=1;i<=n;i++){
if(std::isnan(im[i][n+1])){
return false;
}
}
return true;
}()){
std::cout<<std::fixed<<std::setprecision(2);
for(ll i=1;i<=n;i++){
std::cout<<im[i][n+1]<<'\n';
}
}else{
std::cout<<"No Solution\n";
}
}