高斯消元入门
luogu3389
https://www.luogu.org/problemnew/show/3389
板子题
#include<cstdio>
#include<cstdlib>
#define ROF(i,s,t) for(register int i=s;i>=t;--i)
#define FOR(i,s,t) for(register int i=s;i<=t;++i)
typedef double db;
int n;
db a[233][233];
db ans[233];
inline void gauss(){
db mult;
FOR(i,1,n){
FOR(j,i+1,n){
mult=-a[j][i]/a[i][i];
FOR(k,i,n+1)
a[i][k]*=mult,a[j][k]+=a[i][k];
if(!a[j][j]){
puts("No Solution");
exit(0);
}
}
}
}
inline void back(){
db b;
ROF(i,n,1){
b=0;
FOR(j,i+1,n)
b+=a[i][j]*ans[j];
ans[i]=(a[i][n+1]-b)/a[i][i];
}
}
int main(){
scanf("%d",&n);
FOR(i,1,n)
FOR(j,1,n+1)
scanf("%lf",&a[i][j]);
gauss();
back();
FOR(i,1,n)
printf("%.2lf\n",ans[i]);
return 0;
}
BZOJ1013
http://www.lydsy.com/JudgeOnline/problem.php?id=1013

然后用1~n式减去(n+1)式,得到n个式子,x2和r2均被消去
得到n元线性方程组
然后高斯消元搞搞出解
#include<cstdio>
#include<cstdlib>
#define ROF(i,s,t) for(register int i=s;i>=t;--i)
#define FOR(i,s,t) for(register int i=s;i<=t;++i)
typedef double db;
int n;
db a[66][66],b[66][66],ans[66];
inline void gauss(){
db mult;
FOR(i,1,n){
FOR(j,i+1,n){
mult=-b[j][i]/b[i][i];
FOR(k,i,n+1)
b[i][k]*=mult,b[j][k]+=b[i][k];
}
}
}
inline void back(){
db c;
ROF(i,n,1){
c=0;
FOR(j,i+1,n)
c+=b[i][j]*ans[j];
ans[i]=(b[i][n+1]-c)/b[i][i];
}
}
int main(){
scanf("%d",&n);
FOR(i,1,n+1){
FOR(j,1,n){
scanf("%lf",&a[i][j]);
a[i][n+1]-=a[i][j]*a[i][j];
a[i][j]=-2.00*a[i][j];
}
}
FOR(i,1,n)
FOR(j,1,n+1)
b[i][j]=a[i][j]-a[n+1][j];
gauss();
back();
printf("%.3lf",ans[1]);
FOR(i,2,n)
printf(" %.3lf",ans[i]);
return 0;
}

浙公网安备 33010602011771号