• P4035 [JSOI2008]球形空间产生器


    题目

    P4035 [JSOI2008]球形空间产生器

    分析

    发现可以列出一个方程组,于是高斯消元求解。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    template <typename T>
    inline void read(T &x){
    	x=0;char ch=getchar();bool f=false;
    	while(!isdigit(ch)){if(ch=='-'){f=true;}ch=getchar();}
    	while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
    	x=f?-x:x;
    	return ;
    }
    template <typename T>
    inline void write(T x){
    	if(x<0) putchar('-'),x=-x;
    	if(x>9) write(x/10);
    	putchar(x%10^48);
    	return ;
    }
    #define ll long long
    #define ull unsigned long long
    #define inc(x,y,mod) (((x)+(y))>=(mod)?(x)+(y)-(mod):(x)+(y))
    #define dec(x,y,mod) ((x)-(y)<0?(x)-(y)+(mod):(x)-(y))
    #define rep(i,x,y) for(int i=(x);i<=(y);i++)
    #define dep(i,y,x) for(int i=(y);i>=(x);i--)
    const int N=15,NM=62,M=2e5+5,INF=1e9+7;
    const double eps=1e-8;
    int n,m;
    double a[N][N],d[N][N];
    void Gauss(){
    	for(int i=1,t;i<=n;i++){
    		t=i;
    		for(int j=i;j<=n;j++) if(fabs(d[j][i])>fabs(d[t][i])) t=j;
    		if(t!=i) swap(d[t],d[i]);
    		if(fabs(d[t][i])<eps) return ;
    		for(int j=1;j<=n;j++){
    			if(i==j) continue;
    			double tmp=d[j][i]/d[i][i];
    			for(int k=i+1;k<=n+1;k++) d[j][k]-=tmp*d[i][k];
    		}
    	}
    	for(int i=1;i<=n;i++) d[i][n+1]/=d[i][i];
    	return ;
    }
    signed main(){
    	read(n);
    	for(int i=1;i<=n+1;i++) for(int j=1;j<=n;j++) scanf("%lf",&a[i][j]);
    	for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) d[i][j]=2*(a[i][j]-a[i+1][j]);
    	for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) d[i][n+1]+=a[i][j]*a[i][j]-a[i+1][j]*a[i+1][j];
    	Gauss();
    	for(int i=1;i<=n;i++) printf("%.3lf ",d[i][n+1]);
    	return 0;
    }
    
    
    
  • 相关阅读:
    存储过程
    需要再研究的题目
    sql(SqlServer)编程基本语法
    sql查询语句
    SQL常用增删改查语句
    SQLserver
    三大范式
    四种约束
    数据库
    学习实践:使用模式,原则实现一个C++自动化测试程序
  • 原文地址:https://www.cnblogs.com/Akmaey/p/15168182.html
Copyright © 2020-2023  润新知