1 条题解

  • 1
    @ 2023-10-27 9:19:53
    #include<bits/stdc++.h>
    using namespace std;
    const int N=20;
    const double eps=1e-12;
    int n;
    double w[N][N],a[N][N],x[N];
    void gauss(){
    	int now=1,k;
    	for(int i=1;i<=n;i++){
    		for(k=now;k<=n;k++){
    			if(fabs(a[k][i])>eps){
    				swap(a[k],a[now]);
    				break;
    			}
    		}
    		if(k==n+1)continue;
    		for(k=1;k<=n;k++){
    			if(k!=now){
    				double tmp=a[k][i]/a[now][i];
    				for(int j=1;j<=n+1;j++){
    					a[k][j]-=a[now][j]*tmp;
    				}
    			}
    		}
    		now++;
    	}
    	for(int i=now;i<=n;i++){
    		if(fabs(a[i][n+1])>eps){
    			puts("-1");
    			exit(0);
    		}
    	}
    	if(now<=n){
    		puts("0");
    		exit(0);
    	}
    	for(int i=1;i<=n;i++){
    		x[i]=a[i][n+1]/a[i][i];
    	}
    }
    int main(){
    	scanf("%d",&n);
    	for(int i=1;i<=n+1;i++){
    		for(int j=1;j<=n;j++){
    			scanf("%lf",&w[i][j]);
    		}
    	}
    	for(int i=1;i<=n;i++){
    		for(int j=1;j<=n;j++){
    			a[i][j]=2*(w[i][j]-w[i+1][j]);
    		}
    		double sum=0;
    		for(int j=1;j<=n;j++){
    			sum=sum+(w[i][j]*w[i][j]-w[i+1][j]*w[i+1][j]);
    		}
    		a[i][n+1]=sum;
    	}
    	gauss();
    	for(int i=1;i<=n;i++){
    		printf("%.3lf ",x[i]);
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    1013
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    113
    已通过
    45
    上传者