题目链接:http://hihocoder.com/contest/hiho40/problem/1 ,一道简单的三分。


  题目是在直角坐标系中有一条抛物线y=ax^2+bx+c和一个点P(x,y),求点P到抛物线的最短距离d。

用提示的算法:

  当函数是凸形函数时,二分法无法适用,这时就需要用到三分法。

  从三分法的名字中我们可以猜到,三分法是对于需要逼近的区间做三等分:

  

  我们发现lm这个点比rm要低,那么我们要找的最小点一定在[left,rm]之间。如果最低点在[rm,right]之间,就会出现在rm左右都有比他低的点,这显然是不可能的。 同理,当rm比lm低时,最低点一定在[lm,right]的区间内。利用这个性质,我们就可以在缩小区间的同时向目标点逼近,从而得到极值。

#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <string>
#include <string.h>
#include <algorithm>
using namespace std;
#define eps 1e-8
double a , b , c , X , Y;
inline double f(double x)
{
return (X - x) * (X - x) +
(a * x * x + b * x + c - Y) * (a * x * x + b * x + c - Y);
}
double ternary_search(double l , double r)
{
double lm = ( * l + r) / ;
double rm = (l + * r) / ;
while(r - l >= eps) {
if(f(lm) < f(rm))
r = rm;
else
l = lm;
lm = ( * l + r) / ;
rm = (l + * r) / ;
}
return lm;
}
int main()
{
scanf("%lf %lf %lf %lf %lf" , &a , &b , &c , &X , &Y);
if(f(X) <= eps) {
printf("0.000\n");
} else {
double x = ternary_search(- , );
printf("%.3lf\n" , sqrt(f(x)));
}
return ;
}

最新文章

  1. Win10 下安装 NodeJS
  2. JQuery记住用户名和密码的具体实现
  3. Third-person Camera Navigation
  4. tomcat的文件路径 servelet的配置 以及maven中的WEB-INF的路径
  5. Android 自定义spinner下拉框实现的实现
  6. 循序渐进Python3(五) -- 初识模块
  7. Table View滑动时报错
  8. Hadoop概念学习系列之Hadoop HA进一步深入(二十八)
  9. 【C++】GacLib——ListView.ViewSwitching
  10. 【结构型】Flyweight模式
  11. [kuangbin带你飞]专题十 匹配问题 二分图最大权匹配
  12. 转: ubuntu配置NFS,挂载开发板
  13. javascript 正则表达式代码
  14. PS中模式算法
  15. 从ASP.NET Web API 2 (C#)开始说起
  16. MySQL5.6安装(RPM)笔记
  17. iOS监听模式系列之NSNotificationCenter的简单使用
  18. mahout系列----minhash聚类
  19. SSL及使用openssl实现CA
  20. mysql and不能同时运用在一个字段上

热门文章

  1. Codeforces Round #524 (Div. 2) D(思维,构造)
  2. 文本处理三剑客之gawk
  3. JSP-用网页输出乘法表 三角形及菱形
  4. yum 缓存包到本地
  5. 记录一下我的三天清明节假期,TP5.1写企业站
  6. java 集合解析
  7. mysql执行计划 const eq_ref ref range index all
  8. CentOS 7 iptables 开放8080端口
  9. Java文件与io——缓冲流
  10. (转)linux下文件删除的原理精华讲解(考试题答案系列)