zoukankan      html  css  js  c++  java
  • hdu 3756 Dome of Circus(三分)

    题意:求能将所有点覆盖的最小体积的圆锥。

    体积变化为凹形,故可以三分半径r,再枚举各个点找最大的高h。

    View Code
     1 /*
     2 Author:Zhaofa Fang
     3 Lang:C++
     4 */
     5 #include <cstdio>
     6 #include <cstdlib>
     7 #include <sstream>
     8 #include <iostream>
     9 #include <cmath>
    10 #include <cstring>
    11 #include <algorithm>
    12 #include <string>
    13 #include <utility>
    14 #include <vector>
    15 #include <queue>
    16 #include <stack>
    17 #include <map>
    18 #include <set>
    19 using namespace std;
    20 
    21 typedef long long ll;
    22 #define DEBUG(x) cout<< #x << ':' << x << endl
    23 #define REP(i,n) for(int i=0;i < (n);i++)
    24 #define REPD(i,n) for(int i=(n-1);i >= 0;i--)
    25 #define FOR(i,s,t) for(int i = (s);i <= (t);i++)
    26 #define FORD(i,s,t) for(int i = (s);i >= (t);i--)
    27 #define PII pair<int,int>
    28 #define PB push_back
    29 #define MP make_pair
    30 #define ft first
    31 #define sd second
    32 #define lowbit(x) (x&(-x))
    33 #define INF (1<<30)
    34 
    35 
    36 const double PI = 3.1415926;
    37 int n;
    38 struct point
    39 {
    40     double x,y,z;
    41 }P[10005];
    42 double volume(double r,double h)
    43 {
    44     return PI*r*r*h/3.0;
    45 }
    46 
    47 double fun(double r,double &hx)
    48 {
    49     double MAX = 0;
    50     REP(i,n)
    51     {
    52         double h = P[i].z*r/(r-sqrt(P[i].x*P[i].x+P[i].y*P[i].y));
    53         MAX = max(MAX,h);
    54     }
    55     hx = MAX;
    56     return volume(r,MAX);
    57 }
    58 int main()
    59 {
    60     //freopen("in","r",stdin);
    61     //freopen("out","w",stdout);
    62     int T;
    63     scanf("%d",&T);
    64     while(T--)
    65     {
    66         scanf("%d",&n);
    67         double M=0;
    68         REP(i,n)
    69         {
    70             scanf("%lf%lf%lf",&P[i].x,&P[i].y,&P[i].z);
    71             M = max(M,sqrt(P[i].x*P[i].x+P[i].y*P[i].y));
    72         }
    73         double l=M+1e-6,r=100000.0,hx;
    74         while(fabs(l-r) > 1e-6)
    75         {
    76             double lm = l + (r-l)/3.0;
    77             double rm = r - (r-l)/3.0;
    78             if(fun(lm,hx)<fun(rm,hx))r = rm;
    79             else l = lm;
    80         }
    81         printf("%.3f %.3f\n",hx,r);
    82     }
    83     return 0;
    84 }
    by Farmer
  • 相关阅读:
    Graceful degradation versus progressive enhancement
    表现与数据分离
    避免写出IE Bug
    js控制元素的显示与隐藏
    EntityManager方法简介
    JPA EntityManager详解(一)
    Springmvc中 同步/异步请求参数的传递以及数据的返回
    JPA详解
    单向关系中的JoinColumn
    Hibernate一对多和多对一关系详解 (转载)
  • 原文地址:https://www.cnblogs.com/fzf123/p/2934951.html
Copyright © 2011-2022 走看看