[HDU3756]Dome of Circus
题目大意:
在一个立体的空间内有n个点(x,y,z),满足z>=0。
现在要你放一个体积尽量小的圆锥,把这些点都包住。
求圆锥的高和底面半径。
思路:
因为圆锥里面是对称的,因此问题很容易可以转化到一个二维平面上,我们只需要将所有点绕着z轴旋转到xOz平面上即可。
考虑不同半径时圆锥的体积,不难发现这是一个关于半径r的下凸函数。
于是我们可以三分求解。
对于当前分出来的两个半径,我们可以O(n)枚举每个点算出高度,然后看一下哪边体积小就继续分哪边。
#include<cmath>
#include<cstdio>
#include<cctype>
#include<algorithm>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
const double eps=5e-;
const int N=;
struct Point {
double x,y;
};
Point p[N];
inline double sqr(const double &x) {
return x*x;
}
int n;
inline double calc(const double &r) {
double h=;
for(register int i=;i<n;i++) {
h=std::max(h,(r*p[i].y)/(r-p[i].x));
}
return h;
}
int main() {
for(register int T=getint();T;T--) {
n=getint();
double l=,r=1e4;
for(register int i=;i<n;i++) {
double x,y,z;
scanf("%lf%lf%lf",&x,&y,&z);
p[i]=(Point){sqrt(sqr(x)+sqr(y)),z};
l=std::max(l,p[i].x);
}
while(r-l>eps) {
const double mid1=(l*+r)/,mid2=(l+r*)/;
if(calc(mid1)*sqr(mid1)<calc(mid2)*sqr(mid2)) {
r=mid2;
} else {
l=mid1;
}
}
const double ans=(l+r)/;
printf("%.3f %.3f\n",calc(ans),ans);
}
return ;
}
[HDU3756]Dome of Circus的更多相关文章
- 【凸包】【三分】Gym - 101309D - Dome of Circus
容易发现,圆锥体积和点的具体x.y坐标无关,只与其到z轴的距离sqrt(x*x+y*y)有关. 于是将这些三维的点都投射到二维的xOy平面的第二象限(sqrt(x*x+y*y),z),求个上凸壳,然后 ...
- UVa 1473 - Dome of Circus 三分
把所有的点都映射到XOZ这个平面的第一象限内,则这个三维问题可以转化二维问题: 求一条直线,使所有点在这条直线的下方,直线与X轴和Z轴围成的三角形旋转形成的圆锥体积最小. 这样转化之后可以看出直线的临 ...
- HDU 3756 Dome of Circus
不会做,参见别人的程序: /* 底面为xy平面和轴为z轴的圆锥,给定一些点,使得圆锥覆盖所有点并且体积最小 点都可以投射到xz平面,问题转换为确定一条直线(交x,z与正半轴)使得与x的截距r 和与z轴 ...
- UVA 1473 Dome of Circus
https://cn.vjudge.net/problem/UVA-1473 题目 给出一些点,问包含这些点的最小圆锥(要求顶点在y轴,底面圆心在原点)的体积 题解 因为圆锥对称,所以可以把所有点旋转 ...
- hdu3756三分基础题
Dome of Circus Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU题解索引
HDU 1000 A + B Problem I/O HDU 1001 Sum Problem 数学 HDU 1002 A + B Problem II 高精度加法 HDU 1003 Maxsu ...
- ACM ICPC 2010–2011, Northeastern European Regional Contest St Petersburg – Barnaul – Tashkent – Tbilisi, November 24, 2010
ACM ICPC 2010–2011, Northeastern European Regional Contest St Petersburg – Barnaul – Tashkent – Tbil ...
- maven_spring mvc_mina_dome(实体,文件,批传)(spring mina 初学dome)
看我们群里经常有人在问mina心跳问题,虽然俺是菜鸟可是觉得挺简单的啊,就写了个dome,希望大家多多提意见. 俺做过一段时间网络协议.所以觉得挺简单的吧.哎呀,反正技术就那样了没啥难的. 废话不多说 ...
- Java反射机制DOME
Java反射机制 public class TestHibernate { @Test public void TestHb(){ try { Class cs = Class.forName(&qu ...
随机推荐
- Maven学习笔记(一)
我们暂且可以把Maven理解成是一个项目构建与依赖管理的工具 为什么选用maven? 约定(惯例)优先原则,默认限定了项目目录结构 提供三方依赖管理(解决了依赖维护的问题) 提供了一致的项目构建管 ...
- vue_router添加点击事件
1.在vue学习中遇到给router-link 标签添加事件@click .@mouseover等无效的情况 原来的代码: <router-link to='/SelectPage' @clic ...
- 浅谈Trigger(SimpleTrigger&CronTrigger)
1.Trigger是什么 Quartz中的触发器用来告诉调度程序作业什么时候触发,即Trigger对象是用来触发执行job的. 2.Quartz中的Trigger 3.触发器通用属性: JobK ...
- 2017-2018-1 20179205《Linux内核原理与设计》第七周作业
<Linux内核原理与设计>第七周作业 视频学习及操作分析 创建一个新进程在内核中的执行过程 fork.vfork和clone三个系统调用都可以创建一个新进程,而且都是通过调用do_for ...
- python基础===open()文件处理使用介绍
本文转自:Python open()文件处理使用介绍 1. open()语法open(file[, mode[, buffering[, encoding[, errors[, newline[, c ...
- linux dpm机制分析(上)【转】
转自:http://blog.csdn.net/lixiaojie1012/article/details/23707681 1 DPM介绍 1.1 Dpm: 设备电源管理, ...
- tornado当用户输入的URL无效时转入设定的页面
今天做web的测验..坑爹的要用tornado...作为一个比较新的用的人还不多的东东...查资料好麻烦.. 下面是当用户输入非法 url时, 显示一个自定义 404 页面提示用户,其访问的页面不存在 ...
- 微信小程序实现图片上传,预览,删除
wxml: <view class='imgBox'> <image class='imgList' wx:for="{{imgs}}" wx:for-item= ...
- Load balancer does not have available server for client:xxx
今天在搭建一个springcloud项目在搭建以zuul为网关的时候,项目抛了一个异常, com.netflix.zuul.exception.ZuulException: Forwarding er ...
- PHP-5.6.22安装
查看系统及内核版本 [root@test88 ~]# cat /etc/redhat-release CentOS release 6.6 (Final) [root@test88 ~]# uname ...