题干:

Given a 3-dimension ellipsoid(椭球面)

your task is to find the minimal distance between the original point (0,0,0) and points on the ellipsoid. The distance between two points (x 1,y 1,z 1) and (x 2,y 2,z 2) is defined as 

Input

There are multiple test cases. Please process till EOF.

For each testcase, one line contains 6 real number a,b,c(0 < a,b,c,< 1),d,e,f (0 ≤ d,e,f < 1), as described above. It is guaranteed that the input data forms a ellipsoid. All numbers are fit in double.

Output

For each test contains one line. Describes the minimal distance. Answer will be considered as correct if their absolute error is less than 10 -5.

Sample Input

1 0.04 0.01 0 0 0

Sample Output

1.0000000

题目大意:

求椭圆上离圆心最近的点的距离。

解题报告:

先解方程,然后模拟退火。但是发现这个题无论如何也调不出样例,无奈改爬山算法。(正解是三分)

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define FF first
#define SS second
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
const double eps = 1e-10;
const double GG = 12398734577LL;
const int MAX = 2e5 + 5;
int nx[8] = {1,1,1,0,0,-1,-1,-1};
int ny[8] = {1,0,-1,1,-1,1,0,-1};
double a,b,c,d,e,f;
//double Rand(){return rand()%(RAD+1)/(1.0*RAD);}//随机产生0-1的浮点数
double calz(double x,double y) {double A=c,B=(d*y+e*x),C=f*x*y+a*x*x+b*y*y-1;double det = B*B-4*A*C;if(det < 0) return GG;double z1 = (-B+sqrt(det))/(2*A);double z2 = (-B-sqrt(det))/(2*A);if(fabs(z1)<fabs(z2)) return z1;else return z2;
//  return min(z1,z2);
}
double solve(double curx,double cury) {curx=0,cury=0;double T = 1,ansdis = GG;while(T>eps) {for(int i = 0; i<8; i++) {double tx = curx + nx[i]*T;double ty = cury + ny[i]*T;double tz = calz(tx,ty);if(fabs(tz-GG) < eps) continue;double tmpdis = sqrt(tx*tx+ty*ty+tz*tz);if(tmpdis < ansdis) {ansdis = tmpdis;curx = tx;cury = ty;}}T*=0.99;}return ansdis;
}
int main()
{while(~scanf("%lf%lf%lf%lf%lf%lf",&a,&b,&c,&d,&e,&f)) {double ans = 12312312313LL;ans = min(ans,solve(1/sqrt(a),0));ans = min(ans,solve(0,1/sqrt(b)));printf("%.6f\n",ans);}return 0 ;
}

【HDU - 5017】Ellipsoid(爬山算法,模拟退火,三分)相关推荐

  1. HDU - 5017 Ellipsoid(三分套三分/模拟退火)

    题目链接:点击查看 题目大意:给出一个椭球面的方程,求椭球面上的点与原点距离的最小值 题目分析:因为涉及到了求最小值,我们可以考虑三分,又因为每一个点都是三维的(x,y,z),不过z可以通过x和y的计 ...

  2. hdu 5017 Ellipsoid(西安网络赛 1011)

    Ellipsoid Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total ...

  3. hdu 3007【爬山算法】

    题意:还是和别的一样是个模板提,给出n个点的坐标,然后求出一个点到这个点的最短距离的坐标,并输出最短距离 这个数据很水,精度要求也没有这么高 //#include<bits/stdc++.h&g ...

  4. 爬山算法和模拟退火算法简介(转)

    源:爬山算法和模拟退火算法简介 一. 爬山算法 ( Hill Climbing ) 介绍模拟退火前,先介绍爬山算法.爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为 ...

  5. 爬山法和模拟退火算法求解选址问题

    选址问题 选址问题是运筹学中经典的问题之一.选址问题在生产生活.物流.甚至军事中都有着非常广泛的应用,如工厂.仓库.急救中心.消防站.垃圾处理中心.物流中心.导弹仓库的选址等. 基本问题: P-中位问 ...

  6. 爬山算法 ( Hill Climbing )/模拟退火(SA,Simulated Annealing)

    一. 爬山算法 ( Hill Climbing ) 爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解.爬山算法实现很简单,其主要缺点是 ...

  7. 【机器学习基础】(一) 爬山算法 ( Hill Climbing )与模拟退火(SA,Simulated Annealing)

    一.爬山算法 ( Hill Climbing ) 爬山算法属于人工智能算法的一种. 这种算法基于贪心算法的思想,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解.爬山算 ...

  8. 爬山算法matlab程序,爬山算法和模拟退火算法

    爬山算法 大体思路 爬山算法即是模拟爬山的过程,随机选择一个位置爬山,每次朝着更高的方向移动,直到到达山顶 具体操作 把当前的节点和要走的节点的值进行比较. 如果当前节点是最大的,那么不进行操作:反之 ...

  9. 数学建模笔记——最优值之我见(爬山算法,模拟退火

    目录 爬山问题 爬山算法的流程 爬山算法优缺点 先提物理退火 关于模拟退火 1.1总论 1.2主要流程 1.2.1产生初始解 1.2.2扰动产生新解 1.2.3计算 1.2.4判断 1.2.4循环 2 ...

最新文章

  1. PE文件和COFF文件格式分析——节信息
  2. ES6常用知识点概述
  3. 再学 GDI+[68]: 路径画刷(8) - SetBlendTriangularShaped、SetBlendBellShape
  4. 关于如如何运行tensorrt
  5. 非spring环境中配置文件工具
  6. 深度学习中学习率(lr:learn rate)和batchsize如何影响模型性能?
  7. Linux 列出文件列表命令ls
  8. python 手动读取cifar10_Python搞定Excel,秒解决!大大提高工作效率
  9. MySQL的基本查询(二)
  10. DFS水题 URAL 1152 False Mirrors
  11. Mpvue微信小程序时间消耗进度条组件的实现
  12. python 图形_Python图形数据
  13. 腾讯社交电商小鹅拼拼 如何突围万亿社交电商赛道?
  14. 一信通短信接口对接_实例分享:验证码短信接口如何对接?接口api哪个好用?...
  15. 硬件设计丨什么是硬件工程师?
  16. linux-centos7解决视频无法看问题(安装Adobe flash player)
  17. 微信小程序实现保存图片(唤起用户授权)
  18. java 无符号右移_java中的无符号移位运算
  19. 吃货的痛点:鱼龙混杂,究竟我该相信谁
  20. CentOS7的安装(详细)

热门文章

  1. 较为周全的Asp.net提交验证方案 (下)
  2. php设置cookie值,PHP如何设置和取得Cookie值
  3. 1622C. Set or Decrease
  4. 7-5 汉诺塔的非递归实现 (25 分)
  5. java 默认排序方式_Java Collections.sort()实现List排序的默认方法和自定义方法
  6. html读取本地txt_手机本地电子书籍阅读器 — 静读天下
  7. 大学只待成追忆,只是工作已半年,2016再见
  8. python数独代码_python 实现计算数独
  9. python 前端学习_python学习之路7 前端学习3
  10. ad9生成坐标文件_GROMACS各种文件格式介绍