zoukankan      html  css  js  c++  java
  • poj Building a Space Station

    http://poj.org/problem?id=2031

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<cmath>
     4 #include<algorithm>
     5 using namespace std;
     6 
     7 const double eps=1e-8;
     8 const int inf=1<<23;
     9 int cmp(double x)
    10 {
    11     if(fabs(x)<eps) return 0;
    12     if(x>0) return 1;
    13     return -1;
    14 }
    15 
    16 const double pi=acos(-1.0);
    17 inline double sqr(double x)
    18 {
    19     return x*x;
    20 }
    21 
    22 inline double Sqrt(double a)
    23 {
    24     return a<=0?0:sqrt(a);
    25 }
    26 
    27 struct point
    28 {
    29    double x,y,z,r;
    30    point(){}
    31    point(double a,double b,double c,double d):x(a),y(b),z(c),r(d){}
    32 };
    33 
    34 double dis(const point &a,const point &b)
    35 {
    36     return Sqrt(sqr(a.x-b.x)+sqr(a.y-b.y)+sqr(a.z-b.z));
    37 }
    38 
    39 double dist[1000];
    40 double diss[110][110],ans;
    41 bool vis[1000];
    42 bool prime(int n)
    43 {
    44     memset(vis,0,sizeof(vis));
    45     for(int i=1; i<=n; i++)
    46         dist[i]=inf;
    47     ans=0;dist[1]=0;
    48     for(int i=1; i<=n; i++){
    49         double temp=inf;
    50         int k=0;
    51         for(int j=1; j<=n; j++)
    52         {
    53             if(!vis[j]&&dist[j]<temp)
    54             {
    55                 temp=dist[j];
    56                 k=j;
    57             }
    58         }
    59         if(temp==inf) return false;
    60         vis[k]=true;
    61         ans+=temp;
    62         for(int j=1; j<=n; j++)
    63         {
    64             if(!vis[j]&&dist[j]>diss[k][j])
    65             {
    66                 dist[j]=diss[k][j];
    67             }
    68         }
    69     }
    70     return true;
    71 }
    72 int main()
    73 {
    74     int n;
    75     while(scanf("%d",&n)&&n)
    76     {
    77         point a[1000];
    78         memset(diss,0,sizeof(diss));
    79         for(int i=1; i<=n; i++)
    80         {
    81             scanf("%lf%lf%lf%lf",&a[i].x,&a[i].y,&a[i].z,&a[i].r);
    82         }
    83         memset(diss,0,sizeof(diss));
    84         for(int i=1; i<=n; i++)
    85         {
    86             for(int j=1; j<=n; j++)
    87             {
    88                 if(dis(a[i],a[j])-a[i].r-a[j].r<=0)
    89                 diss[i][j]=0;
    90                 else if(dis(a[i],a[j])-a[i].r-a[j].r>eps)
    91                 diss[i][j]=dis(a[i],a[j])-a[i].r-a[j].r;
    92             }
    93         }
    94         prime(n);
    95         printf("%.3lf
    ",ans);
    96     }
    97     return 0;
    98 }
    View Code
  • 相关阅读:
    Oracle行转列,pivot函数和unpivot函数
    hive中使用spark执行引擎的常用参数
    Spark消费Kafka如何实现精准一次性消费?
    Flink 保证ExactlyOnce
    Flink的容错
    scala实现kafkaProduce1.0读取文件发送到kafka
    flume1.5的几种conf配置
    shell:ps awk杀死进程
    scala的maven项目中的pom文件
    hive开窗函数进阶
  • 原文地址:https://www.cnblogs.com/fanminghui/p/3376600.html
Copyright © 2011-2022 走看看