题目链接:点击查看

题目大意:给出一个椭球面的方程,求椭球面上的点与原点距离的最小值

题目分析:因为涉及到了求最小值,我们可以考虑三分,又因为每一个点都是三维的(x,y,z),不过z可以通过x和y的计算得出,所以我们可以用三分套三分,一层三分x,一层三分y,每次逼近答案即可,另外这个题目还可以用玄学的模拟退火算法,我没太认真去学,挂个代码吧。。这个题目也是够玄学的,在三分套三分的代码里,inf设的太小跑不出答案,inf设的太大也跑不出答案,设到1e4最佳,虽然跑不出样例,但是却可以AC。。一脸懵逼

代码:

三分套三分:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
using namespace std;typedef long long LL;const double inf=1e4;//玄学infconst int N=5e4+100;const double eps=1e-8;double a,b,c,d,e,f;double cal(double x,double y)//确定x和y后返回的z
{double A=c;double B=d*y+e*x;double C=a*x*x+b*y*y+f*x*y-1;double delta=B*B-4*A*C;if(delta<0)return inf;double z1=(-B+sqrt(delta))/A/2;double z2=(-B-sqrt(delta))/A/2;if(z1*z1<z2*z2)return z1;return z2;
}double dis(double x,double y,double z)
{return sqrt(x*x+y*y+z*z);
}double y(double x)//三分y,返回值为确定x后的距离
{double l=-inf,r=inf;while(fabs(l-r)>eps){double mid=(l+r)/2;//mid代表三分的y double mmid=(mid+r)/2;//mmid代表三分的y if(dis(x,mid,cal(x,mid))<dis(x,mmid,cal(x,mmid)))r=mmid;elsel=mid;}return dis(x,l,cal(x,l));
}double x()//三分x,返回值为答案
{double l=-inf,r=inf;while(fabs(l-r)>eps){double mid=(l+r)/2;//mid代表三分的x double mmid=(mid+r)/2;//mmid代表三分的x if(y(mid)<y(mmid))r=mmid;elsel=mid;}return y(l);
}int main()
{
//  freopen("input.txt","r",stdin);while(scanf("%lf%lf%lf%lf%lf%lf",&a,&b,&c,&d,&e,&f)!=EOF){printf("%.8f\n",x());}return 0;
}

模拟退火:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=5e4+100;const int pos[8][2]={0,1,0,-1,1,0,-1,0,1,1,-1,-1,1,-1,-1,1};const double eps=1e-8;double a,b,c,d,e,f;double cal(double x,double y)
{double A=c;double B=d*y+e*x;double C=a*x*x+b*y*y+f*x*y-1;double delta=B*B-4*A*C;if(delta<0)return 1e60;double z1=(-B+sqrt(delta))/A/2;double z2=(-B-sqrt(delta))/A/2;if(z1*z1<z2*z2)return z1;return z2;
}double dis(double x,double y,double z)
{return sqrt(x*x+y*y+z*z);
}double SA()
{double step=1;double x=0,y=0,z;double rate=0.99;while(step>eps){z=cal(x,y);for(int i=0;i<8;i++){double xx=x+step*pos[i][0];double yy=y+step*pos[i][1];double zz=cal(xx,yy);if(zz>1e30)continue;if(dis(xx,yy,zz)<dis(x,y,z)){x=xx;y=yy;z=zz;} }step*=rate;}return dis(x,y,z);
}int main()
{
//  freopen("input.txt","r",stdin);while(scanf("%lf%lf%lf%lf%lf%lf",&a,&b,&c,&d,&e,&f)!=EOF){printf("%.8f\n",SA());}return 0;
}

HDU - 5017 Ellipsoid(三分套三分/模拟退火)相关推荐

  1. HDU - 3694 Fermat Point in Quadrangle(三分套三分/凸包)

    题目链接:点击查看 题目大意:给出四个点,求出该四边形的费马点,费马点是求得一个点,到这四个点的距离最小,最后输出距离, 题目分析:三分套三分,外层三分x,内层三分y即可,不过就是目前来说遇到的所有三 ...

  2. 三分的多种写法及对应的精度 三分套三分原理

    https://www.luogu.org/problemnew/show/P3382 正规三分法 study from: https://blog.csdn.net/pi9nc/article/de ...

  3. 上海理工大学第二届“联想杯”全国程序设计邀请赛 - Experiment Class(几何+三分套三分)

    题目链接:点击查看 题目大意:在二维平面的第一象限中给出两条射线代表河流,再给出起点和终点,问从起点出发,至少经过两条河各一次后到达终点的最短路 题目分析:如果只有一条河的话就是初中数学的经典问题了, ...

  4. #10017 「一本通 1.2 练习 4」传送带+三分套三分

    题目描述 原题来自:SCOI 2010 在一个 2 维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段  AB和线段CD .lxhgww 在  AB上的移动速度为 P ,在  ...

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

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

  6. 传送带(三分套三分)

    这个毒瘤题 原题链接 题目描述 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的 ...

  7. 【HDU - 5017】Ellipsoid(爬山算法,模拟退火,三分)

    题干: Given a 3-dimension ellipsoid(椭球面) your task is to find the minimal distance between the origina ...

  8. Ellipsoid HDU - 5017(模拟退火)

    Given a 3-dimension ellipsoid(椭球面) your task is to find the minimal distance between the original po ...

  9. 外卖(food) 洛谷4040宅男计划 三分套二分贪心

    food评测传送门 [题目描述] 叫外卖是一个技术活,宅男宅女们一直面对着一个很大的矛盾,如何以有限的金钱在宿舍宅得尽量久.     外卖店一共有 N 种食物,每种食物有固定的价钱 Pi 与保质期 S ...

最新文章

  1. 记录我学github的路程(二)
  2. Struts2使用!动态方法调用无效
  3. python服务器查看文件更改记录,Python记录到同一文件,不同用户
  4. 《Getting Real》读书笔记
  5. USB 设备类协议入门【转】
  6. java基础---对象锁和类锁的区别
  7. 【转】C++ 重载、覆盖和隐藏
  8. Windows 中剪贴板的操作
  9. 032-OpenCV模板匹配单个对象、多个对象
  10. View 的 translationX、 translationY , X、Y 和 Left、Top,Right、Bottom
  11. 现在最火爆的盲盒交友小程序源码
  12. 病人信息管理html,基于JSP住院病人信息管理系统本科.doc
  13. 基于滴滴云搭建安全稳定的 Memcached 服务器
  14. 吐槽一下Win10的输入法管理器
  15. Leo说说写简历之晋级篇
  16. 数据挖掘在客户关系管理中的运用
  17. 搞的跟QQ 新闻一样
  18. 最牛通达信主升浪精准指标 准确率超高 主图 源码
  19. 5月底被裁,6月拿到赔偿和工资,下家公司要求提供近半年银行流水来定薪,能不能只提供钱最多的6月流水?...
  20. SQLServer连接服务器维护,SQLServer远程连接服务器详细配置(sp_addlinkedserver)

热门文章

  1. SAAS平台的基本元素
  2. MySQL 高级 - 触发器 - 创建及应用
  3. DelayExchange原理
  4. Properties和IO流相结合的方法
  5. 动态代理源码分析,实现自己的动态代理
  6. spring中bean的细节之三种创建Bean对象的方式
  7. 函数--函数的快速体验
  8. RocketMQ API使用简介、拉取机制
  9. html的属性与css的属性,HTML的属性和css基础
  10. wstring 截取_StringUtils截取字符substringBefore等方法使用