LA4986 Dome of Circus
2013-10-09 20:54
323 查看
微微发亮的传送门
最开始比较傻,一直认为是乱搞,结果乱搞了一大通,最后输出的结果我自己的不认识
后来有了个比较神的思想,那就是三分搜索,首先,我们可以知道,圆锥的体积是(r*r*h*pi)/3,那么这里面的不定量就是r和h,也就是说我们需要求得就是r*r*h的最小值,而r和h又是相关的,也就是说我们知道了一个量就可以通过圆锥轴截面的那个三角形得知另一个量,同时这个函数是一个凸性函数,已经满足了三分的性质,所以我们可以用三分搜索来解决。于是乎我三分h,利用h求出来r,然后一点点地逼近最小值,这样的话这道题就可以被愉快的干掉了。
最开始比较傻,一直认为是乱搞,结果乱搞了一大通,最后输出的结果我自己的不认识
后来有了个比较神的思想,那就是三分搜索,首先,我们可以知道,圆锥的体积是(r*r*h*pi)/3,那么这里面的不定量就是r和h,也就是说我们需要求得就是r*r*h的最小值,而r和h又是相关的,也就是说我们知道了一个量就可以通过圆锥轴截面的那个三角形得知另一个量,同时这个函数是一个凸性函数,已经满足了三分的性质,所以我们可以用三分搜索来解决。于是乎我三分h,利用h求出来r,然后一点点地逼近最小值,这样的话这道题就可以被愉快的干掉了。
#include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <cstdlib> #include <iostream> using namespace std; const int maxn = (int)1e4 + 10; const double eps = 1e-8; int dblcmp(double x){ if (fabs(x)) return 0; return x > 0 ? 1 : -1; } const double pi = acos(-1.0); inline double sqr(double x){ return x * x; } struct point{ double x, y; }; int n; point p[maxn]; double check(double h){ double R = 0; for(int i = 0; i < n; i++) if(R * (h - p[i].y) < h * p[i].x) R = h * p[i].x / (h - p[i].y); return R; } void solve(){ double a, b, c, l, r; l = 0; for (int i = 0; i < n; i++){ scanf("%lf%lf%lf", &a, &b, &c); p[i].x = sqrt(sqr(a) + sqr(b)); p[i].y = c; l = max(l, c); } r = 1 << 30; while(r - l > eps){ double tmp = (r - l) / 3.0; double mid1 = l + tmp, mid2 = l + tmp + tmp; double r1 = check(mid1), r2 = check(mid2); if (sqr(r1) * mid1 > sqr(r2) * mid2) l = mid1; else r = mid2; } printf("%.3lf %.3lf\n", l + eps, check(l) + eps); } int main(){ #ifndef ONLINE_JUDGE freopen("in", "rt", stdin); #endif while(scanf("%d", &n) == 1) solve(); return 0; }
相关文章推荐
- java /n /r /t
- 位图索引介绍
- 论文学习 数码相机系统
- 网上音乐光碟商城
- Linux文件系统的进化
- 基于用户使用场景的产品测试
- 关于申请个人域名和虚拟主机---虚拟主机篇
- 06 体感游戏设计
- 全文索引-lucene,solr,nutch,hadoop之lucene
- 兼职议会
- 将数组中所有小于或等于0的元素都放在数组前面,大于0的元素放在数组后面
- 爱就是一个人一辈子
- C/C++中Static的作用详述
- [LeetCode]Remove Duplicates from Sorted List解题报告
- keepalived+nginx(反向代理)实现web高可用
- 求和问题总结(leetcode 2Sum, 3Sum, 4Sum, K Sum)
- 杭电 小希的迷宫 (并查集)
- iOS之文件处理
- JAVA反射机制
- 高级IO复用应用:聊天室程序