zoukankan      html  css  js  c++  java
  • Cylinder

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2374

    思路:三分枚举。

     1 #include <cstdio>
     2 #include <cmath>
     3 #include <cstring>
     4 #include <algorithm>
     5 #define maxn 1000100
     6 using namespace std;
     7 const double eps=1e-12;
     8 const double pi=acos(-1.0);
     9 
    10 double w,h;
    11 
    12 double ok(double x,int flag)
    13 {
    14     double max1=0;
    15     double k=h;
    16     double s=w;
    17     double r=(x>s)?s:x;
    18     double ss=pi*(r/2)*(r/2);
    19     double ll=pi*r;
    20     double c=k-x;
    21     double r1=(k-x)>s?s:(k-x);
    22     if(s>=ll&&flag==1)
    23     {
    24         double v1=ss*c;
    25         max1=max(max1,v1);
    26     }
    27     if(c>=ll&&flag==2)
    28     {
    29         double v2=ss*s;
    30         max1=max(max1,v2);
    31     }
    32     double s1=pi*(r1/2)*(r1/2);
    33     double l1=pi*r1;
    34     if(s>=l1&&flag==1)
    35     {
    36         double v3=s1*x;
    37         max1=max(v3,max1);
    38     }
    39     if(x>=l1&&flag==2)
    40     {
    41         double v4=s1*s;
    42         max1=max(max1,v4);
    43     }
    44     return max1;
    45 }
    46 
    47 
    48 int main()
    49 {
    50     while(scanf("%lf%lf",&w,&h)!=EOF)
    51     {
    52         if(w==0&&h==0) break;
    53         double l=0,r=h;
    54         double ans=0,ans1=0;
    55         while(r-l>eps)
    56         {
    57             double mid1=(r+l)/2;
    58             double mid2=(l+mid1)/2;
    59             if(ok(mid1,1)>=ok(mid2,1))
    60             {
    61                 ans=mid1;
    62                 l=mid2;
    63             }
    64             else
    65                 r=mid1;
    66         }
    67         l=0,r=w;
    68         while(r-l>eps)
    69         {
    70             double mid1=(r+l)/2;
    71             double mid2=(l+mid1)/2;
    72             if(ok(mid1,2)>=ok(mid2,2))
    73             {
    74                 ans1=mid1;
    75                 l=mid2;
    76             }
    77             else
    78                 r=mid1;
    79         }
    80         printf("%.3lf
    ",max(ok(ans,1),ok(ans1,2)));
    81     }
    82     return 0;
    83 }
    View Code
  • 相关阅读:
    错误:找不到或无法加载主类
    CentOS 7 命令
    CentOS 7 分区
    Pow(x, n)
    Sum Root to Leaf Numbers
    linux下intel 82579LM 网卡驱动安装
    printf打印字符耗时多少
    数组中移动0至后面
    SDL多线程问题之--Unknown request in queue while dequeuing
    java学习123>>IO
  • 原文地址:https://www.cnblogs.com/fanminghui/p/4265694.html
Copyright © 2011-2022 走看看