zoj 3733 Skycity
来源:互联网 发布:网络高清电视机顶盒 编辑:程序博客网 时间:2024/06/09 19:14
几何。给题意跪了。。。circular truncated cone 这句话是重点,只有读懂这句话才能做出来这道题。。。千万别看图,看了图就哭了。。。在这里给大家说一下题意吧,相信知道题意的话是很容易过的。
题意:给你一个圆台,即把圆锥的顶去掉,然后给你上表面半径,下表面半径,然后告诉你需要装多少层玻璃,每层高度相同,每层装玻璃的时候保证装出来的是正棱柱,然后还有一个要求就是每个棱柱面的面积不小于s。由于是圆柱,而且知道了一共多少层,那么每层半径就可以直接求出来,还有一个要注意的地方就是正棱柱要完全包含每一层的上底(不知道这样的玻璃是怎么装上的。),每一层直接算正棱柱的最大边数就可以了,因为边数越大,越“贴近”圆,则最终面积肯定最小,根据s可以确定上界,然后就可以直接知道边数了。要求的是使用玻璃面积的最小值。
求圆的外切正多边形,边长大于等于s*2.对于这个问题,我们先求出图示夹角d,然后由于tan(d) = s / ri;所以,d 越大,s越大,边数越少。所以要使得正多边形的边长大于等于s*2,只需要对(2 * PI) / (2 * d) 向下取整作为正多边形的边数,必然使得边长大于s(而且此时边数肯定最多)。
#include<cstdio>#include<cmath>using namespace std;const double PI = acos(-1.0);double R, r, h, f, s;///R:圆台下表面半径。 r:圆台上表面半径。 h:圆台高度。 f:最终玻璃的层数。 s:每块玻璃的最小面积。int main(){ double ans, d, ri, ad; while(scanf("%lf%lf%lf%lf%lf", &R, &r, &h, &f, &s) != EOF) { ans = 0;ad = (R - r) / f;ri = r; s = s / 2 / (h / f);///h / f是每层圆台的高度,即玻璃的高度。最小面积s除以每层高度,再除以2,即为图示s。 for(int i = 0; i < f; i ++) { d = atan(s / ri);///如图中d。 int tmp = PI / d;///向下取整。 ans += tmp * ri * tan(PI / tmp) * 2.0; ri += ad; } printf("%.3lf\n", ans * h / f); }}
- zoj 3733 Skycity
- zoj 3733 skycity
- ZOJ 3733 Skycity 数学
- zoj 3733 Skycity 长沙赛区
- zoj 3733 Skycity 长沙现场赛H题
- Skycity
- zoj 3733 (hdu 4798) Skycity (2013 亚洲区域赛 长沙站 H)
- ZJU 3733 长沙现场赛 H Skycity
- ZOJ3733 Skycity
- HDU 4798 Skycity
- HDU 4798 Skycity【几何】
- hdu 4798 Skycity(几何)
- UVALive 6618 Skycity(数学)
- HDU 4798 Skycity(计算几何)
- HDU 4798 Skycity【计算机几何】【阅读题】
- HDU 4793 Collision + HDU 4798 Skycity 简单几何
- ZOJ
- ZOJ
- 转载:GetSafeHwnd()和GetSafeHandle()的主要区别
- tty port
- 详解Android中AsyncTask的使用
- 怎样将一个Word表格拆分为两个
- .net object source 快速生成与数据源绑定的控件
- zoj 3733 Skycity
- Java 理论与实践: 正确使用 Volatile 变量
- 显式运行时链接
- linux对所有用户 的某一目录授权
- C语言的指针类型
- ImportError DLL load failed: %1 不是有效的 Win32 应用程序
- 用Apache Server配置php,cgi服务器
- L2 norm L1 norm
- DWZ-JUI 树形Checkbox组件 无法一次获取所有选中的值的解决方法