简单的计算几何;

可以把0-2*pi分成几千份,然后找出最小的;

也可以用三分;

 #include<cstdio>
#include<cmath>
#include<algorithm>
#define pi acos(-1)
#define eps 1e-6
using namespace std; struct node
{
double x,y;
node(double x=,double y=):x(x),y(y){ }
bool operator<(const node &t)const
{
if(x==t.x)return y<t.y;
else return x<t.x;
}
};
node operator-(node u,node v){return node(u.x-v.x,u.y-v.y);}
node operator+(node u,node v){return node(u.x+v.x,u.y+v.y);}
node operator*(node u,double v){return node(u.x*v,u.y*v);}
node operator/(node u,double v){return node(u.x/v,u.y/v);}
int dcmp(double x)
{
if(fabs(x)<eps)return ;
else return x<?-:;
}
bool operator==(const node& a,const node& b)
{
return dcmp(a.x-b.x)== && dcmp(a.y-b.y)==;
}
double dot(node a,node b){return a.x*b.x+a.y*b.y;}
double length(node a){return sqrt(dot(a,a));}
double cross(node a,node b){return a.x*b.y-a.y*b.x;}
double disofnode(node p,node a,node b)
{
if(a==b)return length(p-a);
node v1=b-a,v2=p-a,v3=p-b;
if(dcmp(dot(v1,v2))<)return length(v2);
else if(dcmp(dot(v1,v3))>)return length(v3);
else return fabs(cross(v1,v2))/length(v1);
} node a,yuan,d[];
double r;
double dis(double alph)
{
node tmp;
tmp.x=yuan.x+r*cos(alph);
tmp.y=yuan.y+r*sin(alph);
double dd1=min(disofnode(tmp,d[],d[]),disofnode(tmp,d[],d[]));
double dd2=min(disofnode(tmp,d[],d[]),disofnode(tmp,d[],d[]));
double ret=min(dd1,dd2);
return (ret+length(a-tmp));
} int main()
{
while(scanf("%lf%lf",&a.x,&a.y))
{
if(dcmp(a.x)== && dcmp(a.y)==)break;
scanf("%lf%lf",&yuan.x,&yuan.y);
scanf("%lf",&r);
double x1,x2,y1,y2;
scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
d[].x=x1,d[].y=y1;
d[].x=x2,d[].y=y1;
d[].x=x2,d[].y=y2;
d[].x=x1,d[].y=y2;
sort(d,d+);
double mi=0.0,ma=*pi;
double ans=9999999999.0;
for(int i=;i<=;i++)
{
double mm=(*pi*i)/;
double fd=dis(mm);
ans=min(ans,fd);
// double m1=mi+(ma-mi)/3;//三分的代码
// double m2=ma-(ma-mi)/3;
// if(dis(m1)>dis(m2))mi=m1;
// else ma=m2;
}
printf("%.2lf\n",ans);
}
return ;
}

hdu 4454 Stealing a Cake的更多相关文章

  1. hdu 4454 Stealing a Cake(三分之二)

    pid=4454" target="_blank" style="">题目链接:hdu 4454 Stealing a Cake 题目大意:给定 ...

  2. hdu 4454 Stealing a Cake (三分)

    Stealing a Cake Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  3. HDU 4454 Stealing a Cake(枚举角度)

    题目链接 去年杭州现场赛的神题..枚举角度..精度也不用注意.. #include <iostream> #include <cstdio> #include <cstr ...

  4. HDU 4454 Stealing a Cake --枚举

    题意: 给一个点,一个圆,一个矩形, 求一条折线,从点出发,到圆,再到矩形的最短距离. 解法: 因为答案要求输出两位小数即可,精确度要求不是很高,于是可以试着爆一发,暴力角度得到圆上的点,然后求个距离 ...

  5. hdu 4454 Stealing a Cake 三分法

    很容易想到三分法求解,不过要分别在0-pi,pi-2pi进行三分. 另外也可以直接暴力枚举…… 代码如下: #include<iostream> #include<stdio.h&g ...

  6. HDU 4454 - Stealing a Cake(三分)

    我比较快速的想到了三分,但是我是从0到2*pi区间进行三分,并且漏了一种点到边距离的情况,一直WA了好几次 后来画了下图才发现,0到2*pi区间内是有两个极值的,每个半圆存在一个极值 以下是代码 #i ...

  7. hdu 4454 Stealing a Cake(三分法)

    给定一个起始点,一个矩形,一个圆,三者互不相交.求从起始点->圆->矩形的最短距离. 自己画一画就知道距离和会是凹函数,不过不是一个凹函数.按与水平向量夹角为圆心角求圆上某点坐标,[0, ...

  8. hdu 4454 Stealing a Cake(计算几何:最短距离、枚举/三分)

    题意:已知起点.圆.矩形,要求计算从起点开始,经过圆(和圆上任一点接触即可),到达矩形的路径的最短距离.(可以穿过园). 分析:没什么好的方法,凭感觉圆上的每个点对应最短距离,应该是一个凸函数,用三分 ...

  9. hdu 4771 Stealing Harry Potter&#39;s Precious(bfs)

    题目链接:hdu 4771 Stealing Harry Potter's Precious 题目大意:在一个N*M的银行里,贼的位置在'@',如今给出n个宝物的位置.如今贼要将全部的宝物拿到手.问最 ...

随机推荐

  1. Java基础知识强化之IO流笔记56:IO流练习之 登录注册IO版

    1.  登录注册IO版的Java项目框架,如下: 2. 具体代码实现: (1)User.java(cn.itcast.game): package cn.itcast.pojo; /** * 这是用户 ...

  2. 编译LFS

    成功编译并运行linux from scratch 7.7 system,有必要作下总结.本次用的编译LFS的环境是: 虚拟机是virtalbox宿主系统为CentOS 7.0 x86_64 (cor ...

  3. KindEditor 修改多图片上传显示限制大小和张数

    在使用KindEditor的时候用到多图片上传时,提示有最多上传20张图片,单张图片容量不超过1MB: 修改的文件的地方在:kindeditor\plugins\multiimage\multiima ...

  4. 闲话:你今天OO了吗?

    如果你的分析习惯是在调研技术的时候最先弄清楚有多少业务流程,先画出业务流程图,然后顺藤摸瓜,找出业务流程中每一步骤的参与部门或岗位,弄清楚在这一步参与者所做的事情和填写表单的结果,并关心用户是如何把这 ...

  5. 移动端Web页面问题

    1.安卓浏览器看背景图片,有些设备会模糊.   用同等比例的图片在PC机上很清楚,但是手机上很模糊,原因是什么呢? 经过研究,是devicePixelRatio作怪,因为手机分辨率太小,如果按照分辨率 ...

  6. c语言学习之基础知识点介绍(十四):指针的进阶

    一.指针的加.减法运算 /* 1.加法运算 1).可以跟整数进行加法运算,得到的还是一个地址 公式: 地址 + 1 = 地址 + 1 * 类型所占的字节数 地址 + n = 地址 + n * 类型所占 ...

  7. 安装oracle pl/sql developer

    1.在官网上下载oracle 11g R2版本的数据库,直接常规安装.数据库可以下载32bit. 2.在这里下载oracle client (32bit)http://www.oracle.com/t ...

  8. MySql免安装版配置方法

    第1步:下载如下图安装包 第2步:解压mysql压缩包,然后进入解压后的安装包 将my-default.ini复制一份,并改名为my.ini(我已经完成) 把下面内容复制到my.ini,并保存 [cl ...

  9. bootstrap实现手风琴功能(树形列表)

    首先把架包拷进项目,然后在页面中引进css,js <script src="js/jquery/jquery-2.1.1.min.js"></script> ...

  10. 理解Java中的协变返回类型

    在面向对象程序设计中,协变返回类型指的是子类中的成员函数的返回值类型不必严格等同于父类中被重写的成员函数的返回值类型,而可以是更 "狭窄" 的类型. Java 5.0添加了对协变返 ...