hdu 4454
来源:互联网 发布:python中文网站 编辑:程序博客网 时间:2024/05/17 01:27
题意:
给一个蚂蚁的起点,一个二维的圆形蛋糕,和一个矩形,如何从起点出发,经过蛋糕,回到矩形,使得距离最小。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4454
思路:
对圆进行三分,对选到的圆上的点,可惜对 圆进行三分的时候,分为两个区间[0,pi] [pi ,pi * 2];
再对矩形四条边进行枚举,经过比较
#include <iostream>#include <math.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <algorithm>using namespace std;#define eps 1e-8#define pi 3.1415926#define inf 0x3f3f3f3ftypedef struct point{ double x,y;}p;p start;typedef struct circle{ double x,y,r;}P;P circle;double xa,ya,xc,yc;double dis(double x,double y,double a,double b){ return sqrt((x-a)*(x-a)+(y-b)*(y-b));}double calc_cd(double ang){ double ans = inf , temp; double x = circle.x + circle.r * cos(ang); double y = circle.y + circle.r * sin(ang); double avg = (xc - xa) /1000; for(int i=0;i<=1000;i++){ temp = dis(xa + i *avg, ya,x,y); if(temp < ans) ans = temp; } avg = (xc - xa)/1000; for(int i=0;i<=1000;i++){ temp = dis(xa + i *avg, yc, x , y); if(temp < ans) ans = temp; } avg = (yc - ya)/1000; for(int i=0;i<=1000;i++){ temp = dis(xa,ya + i *avg,x,y); if(temp < ans) ans = temp; } avg = (yc - ya)/1000; for(int i=0;i<=1000;i++){ temp = dis(xc,ya + i *avg,x,y); if(temp < ans) ans = temp; } return ans;}double calc_ab(double ang){ double x = circle.x + circle.r * cos(ang); double y = circle.y + circle.r * sin(ang); return dis(start.x, start.y , x, y) + calc_cd(ang);}double slove_ab(double left,double right){ double mid,midmid; double mid_val,midmid_val; while(left + eps< right){ mid = (left + right)/2; midmid = (mid + right)/2; mid_val = calc_ab(mid); midmid_val = calc_ab(midmid); if(mid_val < midmid_val) right = midmid; else left = mid; } return calc_ab(left);}int main(){ double t; while(~scanf("%lf %lf",&start.x,&start.y)){ if(start.x == 0 && start.y == 0) break; scanf("%lf %lf %lf",&circle.x,&circle.y,&circle.r); scanf("%lf %lf %lf %lf",&xa,&ya,&xc,&yc); if(xa>xc){t=xa,xa=xc,xc=t;} if(ya>yc){t=ya,ya=yc,yc=t;} double ans = min(slove_ab(0,pi),slove_ab(pi,pi*2)); printf("%.2lf\n",ans); } return 0;}
一直wa, 在枚举矩形的时候,边界直接忽略,,,
- hdu 4454
- hdu 4454 三分+几何
- 三分学习 hdu 4454
- hdu 4454(三分)
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- 从google中获取更多信息
- 【CSS】使用 webdings 字体来替代某些常用图片
- C#读取XML内容
- Real-Rime Rendering (2) - 变换和矩阵(Transforms and Matrics)
- IOS单例模式
- hdu 4454
- OpenGL进阶(十一) - GLSL4.x中的数据传递
- 我爱说英语之学美语发音
- 大数乘法
- 使用SQLIO评估数据库磁盘性能
- strtok分割字符串注意点
- oracle用sum函数实现累加
- linux内核--添加系统调用
- 2013.9.28 天津 百度软件研发笔试题