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 }
View Code

 

posted @ 2018-01-24 16:50  鲸头鹳  阅读(126)  评论(0编辑  收藏  举报