BSG白山极客挑战赛 -- B君的圆锥 (三分法求最值)
2016-05-21 00:37
288 查看
B君的圆锥
wwwwodddd (命题人)
基准时间限制:1 秒 空间限制:131072 KB 分值: 40
B君要用一个表面积为S的圆锥将白山云包起来。
B君希望包住的白山云体积尽量大,B君想知道体积最大可以是多少。
注意圆锥的表面积包括底面和侧面。
Input
Output
Input示例
Output示例
三分法求最值模板题,不过由于没做过三分的题,导致百度了模板后写完连实例都没出,
相当郁闷!(漏了条件每次更新体积最大值)
代码如下:
wwwwodddd (命题人)
基准时间限制:1 秒 空间限制:131072 KB 分值: 40
B君要用一个表面积为S的圆锥将白山云包起来。
B君希望包住的白山云体积尽量大,B君想知道体积最大可以是多少。
注意圆锥的表面积包括底面和侧面。
Input
一行一个整数,表示表面积S。(1 <= S <= 10^9)
Output
一行一个实数,表示体积。
Input示例
8
Output示例
1.504506
三分法求最值模板题,不过由于没做过三分的题,导致百度了模板后写完连实例都没出,
相当郁闷!(漏了条件每次更新体积最大值)
代码如下:
#include <iostream> #include <cstdio> #include <cstring> #include <queue> #include <cmath> #include <algorithm> using namespace std; #define inf 0x3f3f3f3f #define ll long long #define eps 1e-9 #define pi 3.1415926 double maxV; double Calc(double r, double s) { double l = s / (pi * r) - r; if (l - r <= 0) return -1; //不成立 double h = sqrt(l*l - r*r); double v = pi*r*r*h / 3.0; if (maxV < v) maxV = v; //必须在此取最大值! return v; //返回当前计算的体积 } void three(double s) //三分法 { double Left, Right; double mid, midmid; double mid_value, midmid_value; Left = 0; Right = s; while (Left + eps < Right) { mid = (Left + Right) / 2; midmid = (mid + Right) / 2; mid_value = Calc(mid, s); midmid_value = Calc(midmid, s); // 假设求解最大极值. if (mid_value >= midmid_value) Right = midmid; else Left = mid; } printf("%.6f\n", maxV); } int main() { #ifdef OFFLINE freopen("t.txt", "r", stdin); #endif double s; while (~scanf("%lf", &s)){ maxV = -inf; //初始化为无穷小 three(s); } return 0; }
相关文章推荐
- Apache Zeppelin & Spark 解析Json异常
- iOS 崩溃分析
- 凸集、凸函数、凸优化问题
- 开通篇
- JTS下载
- Sublime Text 3 快捷键汇总
- Spring Data Redis简介以及项目Demo,RedisTemplate和 Serializer详解
- Git基础使用
- Apache顶级项目介绍5 - Kylin
- 2014-2015 ACM-ICPC Northeastern European Regional Contest (NEERC 14) 解题报告
- 动态规划-3005-经典dp问题
- String类常用方法。
- 程序开发的艺术
- 在Yarn上运行Apache Zeppelin & Spark
- 240. Search a 2D Matrix II
- Git文件3种状态
- 以太网流量控制——PAUSE帧
- 直接插入排序
- H3C模拟器---HCL使用心得
- 小代码 linux小操作 待添加