HDU 4454 Stealing a Cake(枚举角度)
去年杭州现场赛的神题。。枚举角度。。精度也不用注意。。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
#define eps 1e-8
#define PI 3.1415926
double xl,xr,yl,yr;
double judge(double tx,double ty)
{
if(tx < xl&&ty < yl)
return sqrt((tx-xl)*(tx-xl)+(ty-yl)*(ty-yl));
else if(tx >= xl&&tx <= xr&&ty >= yr)
return ty - yr;
else if(tx >= xl&&tx <= xr&&ty <= yl)
return yl - ty;
else if(tx > xr&&ty > yr)
return sqrt((tx-xr)*(tx-xr)+(ty-yr)*(ty-yr));
else if(ty >= yl&&ty <= yr&&tx >= xr)
return tx - xr;
else if(ty >= yl&&ty <= yr&&tx <= xl)
return xl - tx;
else if(tx > xr&&ty < yl)
return sqrt((tx-xr)*(tx-xr)+(ty-yl)*(ty-yl));
else if(tx < xl&&ty > yr)
return sqrt((tx-xl)*(tx-xl)+(ty-yr)*(ty-yr));
return ;
}
int main()
{
double sx,sy,rx,ry,r;
int i;
double tx,ty,minz,temp;
while(scanf("%lf%lf",&sx,&sy)!=EOF)
{
if(sx == &&sy == ) break;
minz = ;
scanf("%lf%lf%lf",&rx,&ry,&r);
scanf("%lf%lf%lf%lf",&xl,&yl,&xr,&yr);
if(xl > xr) swap(xl,xr);
if(yl > yr) swap(yl,yr);
for(i = ;i < ;i ++)
{
tx = rx+r*cos(i*1.0*PI/);
ty = ry+r*sin(i*1.0*PI/);
temp = sqrt((tx-sx)*(tx-sx) + (ty-sy)*(ty-sy));
minz = min(minz,temp+judge(tx,ty));
}
printf("%.2f\n",minz);
}
return ;
}
HDU 4454 Stealing a Cake(枚举角度)的更多相关文章
- HDU 4454 Stealing a Cake --枚举
题意: 给一个点,一个圆,一个矩形, 求一条折线,从点出发,到圆,再到矩形的最短距离. 解法: 因为答案要求输出两位小数即可,精确度要求不是很高,于是可以试着爆一发,暴力角度得到圆上的点,然后求个距离 ...
- hdu 4454 Stealing a Cake(三分之二)
pid=4454" target="_blank" style="">题目链接:hdu 4454 Stealing a Cake 题目大意:给定 ...
- hdu 4454 Stealing a Cake (三分)
Stealing a Cake Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- hdu 4454 Stealing a Cake(计算几何:最短距离、枚举/三分)
题意:已知起点.圆.矩形,要求计算从起点开始,经过圆(和圆上任一点接触即可),到达矩形的路径的最短距离.(可以穿过园). 分析:没什么好的方法,凭感觉圆上的每个点对应最短距离,应该是一个凸函数,用三分 ...
- hdu 4454 Stealing a Cake 三分法
很容易想到三分法求解,不过要分别在0-pi,pi-2pi进行三分. 另外也可以直接暴力枚举…… 代码如下: #include<iostream> #include<stdio.h&g ...
- hdu 4454 Stealing a Cake
简单的计算几何: 可以把0-2*pi分成几千份,然后找出最小的: 也可以用三分: #include<cstdio> #include<cmath> #include<al ...
- HDU 4454 - Stealing a Cake(三分)
我比较快速的想到了三分,但是我是从0到2*pi区间进行三分,并且漏了一种点到边距离的情况,一直WA了好几次 后来画了下图才发现,0到2*pi区间内是有两个极值的,每个半圆存在一个极值 以下是代码 #i ...
- hdu 4454 Stealing a Cake(三分法)
给定一个起始点,一个矩形,一个圆,三者互不相交.求从起始点->圆->矩形的最短距离. 自己画一画就知道距离和会是凹函数,不过不是一个凹函数.按与水平向量夹角为圆心角求圆上某点坐标,[0, ...
- hdu 4771 Stealing Harry Potter's Precious(bfs)
题目链接:hdu 4771 Stealing Harry Potter's Precious 题目大意:在一个N*M的银行里,贼的位置在'@',如今给出n个宝物的位置.如今贼要将全部的宝物拿到手.问最 ...
随机推荐
- .net学习之CTS、CLS和CLR
CLR:公共语言运行时,就是所有.net语言写的程序的公共运行时环境,比如C#.VB.Net等语言写的程序需要运行在CLR上,然后CLR解析执行操作系统的相关指令,CLR是.net程序运行在操作系统的 ...
- Gradle使用指南
Gradle Plugin User Guide - Android Studio Project Sitehttp://tools.android.com/tech-docs/new-build-s ...
- 【网络资料】Astar算法详解
关于A*算法,很早就想写点什么,可是貌似天天在忙活着什么,可事实又没有做什么,真是浮躁啊!所以今晚还是来写一下总结吧! A*算法是很经典的只能启发式搜索算法,关于只能搜索算法和一般的搜索算法(例如DF ...
- Android 线程更新UI报错 : Can't create handler inside thread that has not called Looper.prepare()
MainActivity中有一个按钮,绑定了save方法 public void save(View view) { String title = titleText.getText().toStri ...
- 在 Mac 上安装 sbt
通过第三方的包安装 注意: 第三方的包可能没有提供最新的版本,请记得将任何问题反馈给这些包相关的维护者. 通过 Macports 安装 $ port install sbt 通过 Homebrew 安 ...
- android 入门-控件 测量状态栏高度
private ViewTreeObserver viewTreeObserver; /** 获取可見区域高度 **/ WindowManager manager = getWindowManager ...
- myeclipse报错: java compiler level does not match the version of the installed java project facet
在升级到myeclipse 9.0正式版后,很无耐地出发现了一个error级别的错误,虽然没在代码中,但是看着让人很不舒服.第一反应就是到网上搜索解决之道,结果,网站说在工程的属性中去找个叫啥&quo ...
- Android LayoutInflater详解 (转)
在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById().不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例 ...
- 转载 linux内核 asmlinkage宏
转载http://blog.chinaunix.net/uid-7390305-id-2057287.html 看一下/usr/include/asm/linkage.h里面的定义:#define a ...
- JQuery经典小例子——可编辑的表格
可编辑的表格: 屏幕剪辑的捕获时间: 2015/8/14 9:16 HTML代码为: <!DOCTYPE html> <htmlxmlns="http://www.w3.o ...