BZOJ 1013: [JSOI2008]球形空间产生器sphere 高斯消元
http://www.lydsy.com/JudgeOnline/problem.php?id=1013
板子题,我的智商拉低了这题的通过率orz。
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<cmath> 5 #include<iostream> 6 #include<map> 7 #include<ctime> 8 using namespace std; 9 const double eps=0.00001; 10 int n; 11 double w[20][20]; 12 double b[20][20]; 13 double ans[20]={}; 14 double zhi[20]={}; 15 int main(){ 16 scanf("%d",&n); 17 n++; 18 for(int i=1;i<=n;i++){ 19 b[i][0]=0.0; 20 for(int j=1;j<n;j++){ 21 scanf("%lf",&w[i][j]); 22 if(i!=n){ 23 b[i][j]=-2*w[i][j]; 24 b[i][0]-=w[i][j]*w[i][j]; 25 } 26 if(i!=1){ 27 b[i-1][j]+=2*w[i][j]; 28 b[i-1][0]+=w[i][j]*w[i][j]; 29 } 30 } 31 } 32 n--; 33 for(int i=1;i<n;i++){ 34 int num=i; 35 for(int j=i+1;j<=n;j++){ 36 if(fabs(b[j][i])>fabs(b[num][i])) num=j; 37 } 38 for(int j=0;j<=n;j++){ 39 swap(b[i][j],b[num][j]); 40 } 41 for(int j=i+1;j<=n;j++){ 42 double su=b[j][i]/b[i][i]; 43 if(fabs(b[j][i])<=eps)continue; 44 for(int q=0;q<=n;q++){ 45 b[j][q]-=b[i][q]*su; 46 } 47 } 48 } 49 for(int i=n;i>=1;i--){ 50 for(int j=n;j>i;j--){ 51 b[i][0]-=b[i][j]*zhi[j]; 52 }zhi[i]=b[i][0]/b[i][i]; 53 } 54 for(int i=1;i<n;i++){ 55 printf("%.3f ",zhi[i]); 56 }printf("%.3f",zhi[n]); 57 return 0; 58 }