hdu3756 三分求最小圆锥
题意:
让你找到一个最小的圆柱去覆盖所有的竖直的线段..
思路:
三分,直接去三分他的半径,因为想下,如果某个半径是最优值,那么
从R(MAX->now->MIN)是的 V肯定是先增大然后减小再增大,也就是满足凹凸性,所以可以三分,三分的时候根据当前的半径我们可以枚举每一个点,通过相似三角形去找到最大的H作为当前的H,然后根据V三分搜索就行了,对于low的初始值我赋的是 x_y平面上离原点距离最远的那个的距离+ 1e-9 ,防止被除数是0的情况.其他的没啥就是简单的三分,如果你想卡排名就不断缩小eps知道wa为止.
#include<stdio.h>
#include<math.h> #define eps 1e-9
#define N 10000 + 100
double PI = acos(-1.0); typedef struct
{
double x ,y ,z;
}NODE; NODE node[N]; double Q_H(double R ,int n)
{
double MAX = 0;
for(int i = 1 ;i <= n ;i ++)
{
double tmp = sqrt(node[i].x * node[i].x + node[i].y * node[i].y);
double now = R / (R - tmp) * node[i].z;
if(MAX < now) MAX = now;
}
return MAX;
} double Q_V(double R ,double H ,int n)
{
return PI * R * R / 3 * H;
} void solve(int n ,double loww)
{
double low ,up ,mid ,mmid;
low = loww ,up = 1000000000;
double v1 ,v2 ,h1 ,h2;
while(1)
{
mid = (low + up) / 2;
mmid = (mid + up) / 2;
h1 = Q_H(mid ,n);
h2 = Q_H(mmid ,n);
v1 = Q_V(mid ,h1 ,n);
v2 = Q_V(mmid ,h2 ,n);
if(v1 > v2) low = mid;
else up = mmid;
if(up - low < eps) break;
}
printf("%.4lf %.4lf\n" ,h1 ,mid);
return ;
} int main ()
{
int t ,n ,i;
scanf("%d" ,&t);
while(t--)
{
scanf("%d" ,&n);
double ma = 0;
for(i = 1 ;i <= n ;i ++)
{
scanf("%lf %lf %lf" ,&node[i].x ,&node[i].y ,&node[i].z);
double now = sqrt(node[i].x * node[i].x + node[i].y * node[i].y);
if(ma < now) ma = now;
}
solve(n ,ma + eps);
}
return 0;
}
hdu3756 三分求最小圆锥的更多相关文章
- HDU 4355——Party All the Time——————【三分求最小和】
Party All the Time Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- hihocoder 1142 三分求极值【三分算法 模板应用】
#1142 : 三分·三分求极值 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 这一次我们就简单一点了,题目在此: 在直角坐标系中有一条抛物线y=ax^2+bx+c和一 ...
- SQL Server 2008 R2——查找最小nIndex,nIndex存在而nIndex+1不存在 求最小连续数组中的最大值
=================================版权声明================================= 版权声明:原创文章 谢绝转载 请通过右侧公告中的“联系邮 ...
- hiho 第116周,最大流最小割定理,求最小割集S,T
小Hi:在上一周的Hiho一下中我们初步讲解了网络流的概念以及常规解法,小Ho你还记得内容么? 小Ho:我记得!网络流就是给定了一张图G=(V,E),以及源点s和汇点t.每一条边e(u,v)具有容量c ...
- poj 3469 Dual Core CPU【求最小割容量】
Dual Core CPU Time Limit: 15000MS Memory Limit: 131072K Total Submissions: 21453 Accepted: 9297 ...
- BZOJ_1001_狼抓兔子_(平面图求最小割+对偶图求最短路)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1001 1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec ...
- The Minimum Length - HUST 1010(求最小循环节)
题意:有个一字符串A(本身不是循环串),然后经过很多次自增变成AAAAA,然后呢从自增串里面切出来一部分串B,用这个串B求出来A的长度. 分析:其实就是求最小循环节.......串的长度 - 最大 ...
- [KMP求最小循环节][HDU1358][Period]
题意 求所有循环次数大于1的前缀 的最大循环次数和前缀位置 解法 直接用KMP求最小循环节 当满足i%(i-next[i])&&next[i]!=0 前缀循环次数大于1 最小循环节是i ...
- 一个好的函数(gcd)求最小公约数
这个函数是我无意中看到的很不错,很给力,我喜欢 是用于求最小公约数的 简单的描述就是,记gcd(a,b)表示非负整数a,b的最大公因数,那么:gcd(a,b)=gcd(b,a%b)或者gcd(a,0) ...
随机推荐
- HDOJ-1711(KMP算法)
Number Sequence HDOJ-1711 1.这里使用的算法是KMP算法,pi数组就是前缀数组. 2.代码中使用到了一个技巧就是用c数组看成是复合字符串,里面加一个特殊整数位-1000006 ...
- day1_安装及建立数据库和表
#第一份数据库及表create database library; use library; create table book( id int primary key, book_name char ...
- Linux速通05 文件处理与编辑
使用 cat 命令进行文件的纵向合并 # 例:使用 cat 命令将 baby.age.baby.weight.baby.sex 这三个文件纵向合并为 baby文件 * cat baby.age bab ...
- js--this指向的相关问题
前言 关于this的指向问题是前端面试中常考的知识点,也是我们开发学习中较难理解的问题.作为JavaScript的基础,需要我们彻底理解这一关键词.this作为JavaScript中非常复复杂的机制, ...
- java常见面试题3:线程间通信
写两个线程,一个线程打印 1~52,另一个线程打印字母A-Z. 打印顺序为12A34B56C78D--5152Z.要求用线程间的通信. 代码清单: class Printer { private in ...
- 2018ICPC南京D. Country Meow
题目: 题意:三维里有n个点,找一个最小的球将所有点覆盖. 题解:退火法模拟的一道板子题. 1 #include <stdio.h> 2 #include <iostream> ...
- 官方正式发布 Java 16
前言 就在2021/03/16,官方正式发布了Java 16.我们可以下载使用Java 16了. 特性 向量API(孵化) 在运行期,Vector 表示向量计算可以可靠地编译成支持CPU架构上的最佳矢 ...
- Centos7安装以及设置Redis详细步骤
一.Redis安装: 1.指定文件夹下下载redis安装包: [root@bogon ~]# mkdir /usr/local/soft/redis [root@bogon ~]# cd /usr/l ...
- [Azure Devops] 使用 Azure Repos 管理代码
1. 什么是 Azure Repos Azure Repos 是一组版本控制工具,可用于管理代码.无论您的软件项目是大型项目还是小型项目,都应尽快使用版本控制. 版本控制系统是可帮助您跟踪随时间变化对 ...
- Hadoop学习笔记—HDFS
目录 搭建安装 三个核心组件 安装 配置环境变量 配置各上述三组件守护进程的相关属性 启停 监控和性能 Hadoop Rack Awareness yarn的NodeManagers监控 命令 hdf ...