zoukankan      html  css  js  c++  java
  • bzoj1013

    通过每两个点到一个定点距离相等可以得到n个n元一次方程组,然后高斯消元就行了,第一次写高斯消元。。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<cstdlib>
     4 #include<cmath>
     5 #include<ctime>
     6 #include<iostream>
     7 #include<algorithm>
     8 #include<queue>
     9 #include<stack>
    10 #include<set>
    11 #include<map>
    12 #define rep(i,l,r) for(int i=(l);i<(r);i++)
    13 #define clr(a,x) memset(a,x,sizeof(a))
    14 using namespace std;
    15 typedef long long ll;
    16 typedef pair<int,int> pii;
    17 #define mkp(a,b) make_pair(a,b)
    18 int read(){
    19     int ans=0,f=1;
    20     char c=getchar();
    21     while(!isdigit(c)){
    22         if(c=='-') f=-1;
    23         c=getchar();
    24     }
    25     while(isdigit(c)){
    26         ans=ans*10+c-'0';
    27         c=getchar();
    28     }
    29     return ans*f;
    30 }
    31 const int maxn=19;
    32 int n;
    33 double A[maxn],B[maxn],a[maxn][maxn];
    34 void solve(){
    35     rep(i,1,n+1){
    36         int t=i;
    37         rep(j,i+1,n+1) if(fabs(a[j][i])>fabs(a[t][i])) t=j;
    38         if(t!=i) rep(j,1,n+2) swap(a[i][j],a[t][j]);
    39         rep(k,i+1,n+1){
    40             double p=a[k][i]/a[i][i];
    41             rep(j,i,n+2) a[k][j]-=p*a[i][j];
    42         }
    43     }
    44     for(int i=n+1;i;i--){
    45         rep(j,i+1,n+1) a[i][n+1]-=a[j][n+1]*a[i][j];
    46         a[i][n+1]/=a[i][i];
    47     }
    48     rep(i,1,n+1){
    49         printf("%.3lf",a[i][n+1]);
    50         if(i!=n) putchar(' ');
    51     }
    52 }
    53 int main(){
    54     n=read();
    55     rep(i,1,n+1) scanf("%lf",A+i);
    56     rep(i,1,n+1){ 
    57         rep(j,1,n+1){
    58             scanf("%lf",B+j);
    59             a[i][n+1]+=B[j]*B[j]-A[j]*A[j];
    60             a[i][j]=2*(B[j]-A[j]);
    61         }
    62     }
    63     solve();
    64     return 0;
    65 }
    View Code

    1013: [JSOI2008]球形空间产生器sphere

    Time Limit: 1 Sec  Memory Limit: 162 MB
    Submit: 3449  Solved: 1792
    [Submit][Status][Discuss]

    Description

    有一个球形空间产生器能够在n维空间中产生一个坚硬的球体。现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁这个球形空间产生器。

    Input

    第一行是一个整数,n。接下来的n+1行,每行有n个实数,表示球面上一点的n维坐标。每一个实数精确到小数点后6位,且其绝对值都不超过20000。

    Output

    有且只有一行,依次给出球心的n维坐标(n个实数),两个实数之间用一个空格隔开。每个实数精确到小数点后3位。数据保证有解。你的答案必须和标准输出一模一样才能够得分。

    Sample Input

    2
    0.0 0.0
    -1.0 1.0
    1.0 0.0

    Sample Output

    0.500 1.500

    HINT

    数据规模:

    对于40%的数据,1<=n<=3

    对于100%的数据,1<=n<=10

    提示:给出两个定义:

    1、 球心:到球面上任意一点距离都相等的点。

    2、 距离:设两个n为空间上的点A, B的坐标为(a1, a2, …, an), (b1, b2, …, bn),则AB的距离定义为:dist = sqrt( (a1-b1)^2 + (a2-b2)^2 + … + (an-bn)^2 )

    Source

     
    [Submit][Status][Discuss]
  • 相关阅读:
    @RequestParam注解使用:Name for argument type [java.lang.String] not available, and parameter name information not found in class file either.
    cglib动态代理导致注解丢失问题及如何修改注解允许被继承
    springboot Autowired BeanNotOfRequiredTypeException
    git根据用户过滤提交记录
    不同包下,相同数据结构的两个类进行转换
    How to use Jackson to deserialise an array of objects
    jooq实践
    java如何寻找main函数对应的类
    Python--matplotlib
    Python 和 Scikit-Learn
  • 原文地址:https://www.cnblogs.com/chensiang/p/5016138.html
Copyright © 2011-2022 走看看