• BZOJ.1013.[JSOI2008]球形空间产生器(高斯消元)


    题目链接

    HDU3571

    //824kb	40ms
    //HDU3571弱化版 跟那个一比这个太水了,练模板吧。
    //列出$n+1$个二次方程后两两相减,就都是一次方程了。
    #include <cmath>
    #include <cstdio>
    #include <algorithm>
    const int N=12;
    
    int n;
    double A[N][N],B[N],f[N][N];
    
    void Gauss()
    {
    	for(int mxrow,j=0; j<n; ++j)
    	{
    		mxrow=j;
    		for(int i=j+1; i<n; ++i)
    			if(fabs(f[i][j])>fabs(f[mxrow][j])) mxrow=i;
    		if(mxrow!=j) std::swap(f[mxrow],f[j]);
    		for(int i=j+1; i<n; ++i)
    			if(f[i][j])
    			{
    				double t=f[i][j]/f[j][j];
    				for(int k=j; k<=n; ++k)
    					f[i][k]-=t*f[j][k];
    			}
    	}
    	for(int i=n-1; ~i; --i)
    	{
    		for(int j=i+1; j<n; ++j) f[i][n]-=f[i][j]*f[j][n];
    		f[i][n]/=f[i][i];
    	}
    	for(int i=0; i<n; ++i) printf("%.3lf ",f[i][n]);
    }
    
    int main()
    {
    	scanf("%d",&n);
    	for(int i=0; i<=n; ++i)
    		for(int j=0; j<n; ++j)
    			scanf("%lf",&A[i][j]), B[i]+=A[i][j]*A[i][j];
    	for(int i=0; i<n; ++i)
    		for(int j=0; j<n; ++j) f[i][j]=(A[i][j]-A[i+1][j])*2.0;
    	for(int i=0; i<n; ++i) f[i][n]=B[i]-B[i+1];
    	Gauss();
    
    	return 0;
    }
    
  • 相关阅读:
    洛谷 P1068 分数线划定
    LeetCode 7. Reverse Integer
    LeetCode 504. Base 7
    洛谷 P1598 垂直柱状图
    用户场景
    个人博客03
    个人博客02
    个人博客01
    《构建之法》阅读笔记03
    学习进度条(第四周)
  • 原文地址:https://www.cnblogs.com/SovietPower/p/8762491.html
Copyright © 2020-2023  润新知