zoukankan      html  css  js  c++  java
  • 2013 ACM区域赛长沙 H zoj 3733 (hdu 4798) Skycity

    题意:一个圆台,底面和顶面半径分别为R,r,然后高度为H,一共F层,每层高度一样,然后要在每层的天花板上贴方格玻璃,方格玻璃要满足以下几个条件:

    方格玻璃面积不能小于S,且方格玻璃要围成一个正多边形,且正好将天花板围住(也就是说天花板的圆面是这个多边形的内接圆),并且要使得贴的玻璃数量尽量少,也就是说这个正多边形的边数要尽量少。问最后所用玻璃的总面积。

    思路:先求每个圆的半径,也就是等差数列。再二分正多边行数量。二分容易出错,此题还有精度要求。。。。。

     1 #include <iostream>
     2 #include <string.h>
     3 #include <stdio.h>
     4 #include <algorithm>
     5 #include <cmath>
     6 using namespace std;
     7 const double pi=acos(-1);
     8 int R,r,H,t,S;
     9 double h,ans;
    10 double get(int n,double r) {
    11     return 2.0*r*tan(pi/n);
    12 }
    13 
    14 void binary() {
    15     int limit=100000;
    16     for(int i=t; i>=1; i--) {
    17         double rr=1.0*(R-r)/t*(i-1)+r;
    18         int mi=3,ma=limit,mid,num;
    19         double s;
    20         while(mi<=ma) {
    21             mid=(mi+ma)>>1;
    22             double tmp=get(mid,rr)*h;
    23             if(tmp-S>1e-8) {
    24                 s=tmp;
    25                 num=mid;
    26                 mi=mid+1;
    27             } else
    28                 ma=mid-1;
    29         }
    30         ans+=num*s;
    31         limit=num;
    32     }
    33 }
    34 
    35 int main() {
    36     while(~scanf("%d%d%d%d%d",&R,&r,&H,&t,&S)) {
    37         h=(double)H/t,ans=0;
    38         binary();
    39         printf("%.3lf
    ",ans);
    40     }
    41     return 0;
    42 }
    View Code
  • 相关阅读:
    python项目文件夹
    内置函数
    函数的递归
    python入门之模块
    匿名函数
    生成器表达式
    三元表达式
    列表生成式
    input相关问题总结
    表单验证
  • 原文地址:https://www.cnblogs.com/ITUPC/p/5333993.html
Copyright © 2011-2022 走看看