這是個版子題,當然本蒟蒻也是看了好幾天才明白
對於這樣的線性方程組,我們可以看成是乙個矩陣
但我們要注意的是:
行列式是乙個確切的值(有關行列式求值,下片博文再說),可以看做是乙個數值;
而矩陣不同,矩陣是乙個數表,無特殊的值。當然,性質也略有不同(這裡就先不細講了)
高斯消元的核心就是把這個n*n的矩陣消成乙個對角矩陣(就是除了a【i】【i】為1以外,其餘全為零但是不要亂劃a【i】【n+1】這是我們要輸出的東西)然後就ok了
其中一些性質可以通過度娘或下面的(李昊的)過程**驗證一下
//這不是ac**,只是乙個檢測的(黈力的小心一點啊qaq)通過這個**,可以看到化簡的每一步過程#include#include
#include
#include
#include
#include
using
namespace
std;
typedef
long
long
ll;typedef
long
double
ld;typedef pair
pr;const
double pi=acos(-1
);#define rep(i,a,n) for(int i=a;i<=n;i++)
#define per(i,n,a) for(int i=n;i>=a;i--)
#define rep(i,u) for(int i=head[u];i;i=next[i])
#define clr(a) memset(a,0,sizeof a)
#define pb push_back
#define mp make_pair
#define fi first
#define sc secondld eps=1e-9
;ll pp=1000000007
;ll mo(ll a,ll pp)
ll powmod(ll a,ll b,ll pp)
ll read()
//head
intn,m;
double a[100][100
];bool check(int
k)int
main()
int flag=0
; rep(i,
1,n)
rep(j,
1,n+1
)swap(a[i][j],a[t][j]);
double kk=a[i][i];
rep(j,
1,n+1)a[i][j]/=kk;
rep(j,
1,m)
if(i!=j)
puts(
"------------");
rep(j,
1,m)
}if(flag)
printf(
"so many solutions\n");}}
下面才是真正的ac**:
//真正的ac**這其中用到了一些神奇的性質,還是提前掌握為妙#include#include
#include
using
namespace
std;
intn,s;
double a[1001][1001
];int
main()
for(int j=1;j<=n+1;j++)
swap(a[i][j],a[s][j]);
double k=a[i][i];
for(int j=1;j<=n+1;j++)
a[i][j]=a[i][j]/k; //為防止a【i】【i】為零,可以換一下
for(int j=1;j<=n;j++)}}
for(int i=1;i<=n;i++)
printf(
"%.2lf\n
",a[i][n+1
]);//輸出ouo
return0;
}
洛谷P3389 模板 高斯消元法
題目描述 給定乙個線性方程組,對其求解。輸入樣例 1 3 1 3 4 5 1 4 7 3 9 3 2 2 輸出樣例 1 0.97 5.18 2.39 分析 對於第i個方程用它的第i個元消掉第i 1個方程後面每個方程的第i個元,如果第i個方程的i消為0則此方程組有無窮解或無解,這樣到最後乙個方程只有乙...
洛谷P3389 模板 高斯消元法
題目傳送門 題目分析 時隔多年 月 我終於入了高消這個坑。表示掛一發模板就跑,以後複習用。具體細節什麼的還是自己yy吧,有益身心健康。code include include include include include include include include using namespac...
洛谷 P3389 模板 高斯消元法
傳送門 給出乙個n nn元一次的方程,對其求解 大概思路就是不斷用某個式子去抵消其他式子的某一項未知數的係數,這樣進行n 1 n 1n 1,我們就能得到aix i bi a ix i b i ai xi bi 直接求解然後將x ix i xi 向其他式子帶入,乙個個求出其他未知數 include i...