mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-08-22 03:01:43 +00:00
83 lines
1.7 KiB
C++
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";
|
|
}
|
|
} |