hdu 4454 Stealing a Cake 三分法
很容易想到三分法求解,不过要分别在0-pi,pi-2pi进行三分。
另外也可以直接暴力枚举……
代码如下:
1 #include<iostream> 2 #include<stdio.h> 3 #include<algorithm> 4 #include<iomanip> 5 #include<cmath> 6 #include<cstring> 7 #include<vector> 8 #define ll __int64 9 #define pi acos(-1.0) 10 #define MAX 50000 11 using namespace std; 12 struct point 13 { 14 double x,y; 15 point(double _x=0,double _y=0){ 16 x=_x; 17 y=_y; 18 } 19 point operator-(point a){ 20 return point(x-a.x,y-a.y); 21 } 22 point operator+(point a){ 23 return point(x+a.x,y+a.y); 24 } 25 double operator*(point a){ 26 return (x*a.x+y*a.y); 27 } 28 }p1,p2,p; 29 double x,y,r; 30 double dis2(point a,point b) 31 { 32 return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); 33 } 34 double dis(point a, point b, point c) 35 { 36 point ab = b - a; 37 point ac = c - a; 38 double f = ab*ac; 39 if (f<0) return dis2(c, a);//C1处的点 40 double d = ab*ab; 41 if ( f>d) return dis2(c, b);//C2处的点,d=f*cos(theta) 42 f = f/d; 43 ab.x*=f;ab.y*=f; 44 point D = a + ab; // c在ab线段上的投影点 45 return dis2(c, D); 46 } 47 double line(point a) 48 { 49 point b,c; 50 b.x=min(p1.x,p2.x); 51 b.y=max(p1.y,p2.y); 52 c.x=max(p1.x,p2.x); 53 c.y=min(p1.y,p2.y); 54 double MIN1,MIN2; 55 MIN1=min(dis(p2,c,a),dis(p1,c,a)); 56 MIN2=min(dis(p1,b,a),dis(p2,b,a)); 57 return min(MIN1,MIN2); 58 } 59 point get(double a) 60 { 61 return point(x+r*cos(a),y+r*sin(a)); 62 } 63 double solve() 64 { 65 double r,l,mid,midmid,t1,t2,ans1,ans2; 66 point m1,m2; 67 r=pi;l=0; 68 while(r-l>=1e-8){ 69 mid=(r+l)/2; 70 midmid=(mid+r)/2; 71 m1=get(mid); 72 m2=get(midmid); 73 t1=line(m1)+dis2(m1,p); 74 t2=line(m2)+dis2(m2,p); 75 if(t1>t2) l=mid; 76 else r=midmid; 77 } 78 ans1=t1; 79 r=2*pi;l=pi; 80 while(r-l>=1e-8){ 81 mid=(r+l)/2; 82 midmid=(mid+r)/2; 83 m1=get(mid); 84 m2=get(midmid); 85 t1=line(m1)+dis2(m1,p); 86 t2=line(m2)+dis2(m2,p); 87 if(t1>t2) l=mid; 88 else r=midmid; 89 } 90 ans2=t1; 91 return min(ans1,ans2); 92 } 93 int main(){ 94 while(cin>>p.x>>p.y){ 95 if(fabs(p.x)<1e-8&&fabs(p.y)<1e-8) break; 96 cin>>x>>y>>r>>p1.x>>p1.y>>p2.x>>p2.y; 97 point temp; 98 temp.x=p1.x;temp.y=p1.y; 99 p1.x=min(p1.x,p2.x);p1.y=min(p1.y,p2.y); 100 p2.x=max(temp.x,p2.x);p2.y=max(temp.y,p2.y); 101 printf("%.2lf\n",solve()); 102 } 103 return 0; 104 }
View Code
转载于:https://www.cnblogs.com/xin-hua/p/3253215.html
hdu 4454 Stealing a Cake 三分法相关推荐
- hdu 4454 Stealing a Cake(三分之二)
题目链接:hdu 4454 Stealing a Cake 题目大意:给定一个起始点s,一个圆形.一个矩形.如今从起点開始,移动到圆形再移动到矩形.求最短距离. 解题思路:在圆周上三分就可以.即对角度 ...
- hdu 4771 Stealing Harry Potter#39;s Precious(bfs)
题目链接:hdu 4771 Stealing Harry Potter's Precious 题目大意:在一个N*M的银行里,贼的位置在'@',如今给出n个宝物的位置.如今贼要将全部的宝物拿到手.问最 ...
- HDU - 6681 Rikka with Cake
Rikka with Cake Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) P ...
- hdu - 6681 Rikka with Cake 线段树
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6681 题意:给定一个左下顶点为,右上顶点为的矩形,然后给你k条射线,每条射线的起点及方向(上下左右)都 ...
- HDU 6681 Rikka with Cake(扫描线、动态开点线段树)
http://acm.hdu.edu.cn/showproblem.php?pid=6681 题意 在矩形区域内有k条射线,问这些射线将矩形分成了多少区域 题解 容易发现答案为所有射线交点个数+1. ...
- HDU 6681 Rikka with Cake (可持久化线段树)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6681 题意:一个n*m的矩形蛋糕,每次给一个点(x, y)和方向dir确定一条切的线,问最后把蛋糕分成了几 ...
- HDU - 5640 -King's Cake
It is the king's birthday before the military parade . The ministers prepared a rectangle cake of si ...
- HDU-4454 Stealing a Cake 三分枚举
题意:给定一个点,一个圆,以及一个矩形,现在问从一个点到一个圆再到一个矩形的最短距离为多少?到达一个目标可以只挨着或者穿过它. 解法:目前只知道从一个点到圆上按照[0,PI],[PI,2*PI]的两个 ...
- HDU 3400 Line belt【三分法】
题意: 有两条线段,在其中一条线段上移动的速度为 v1,在另一条线上速度为v2, 在其他地方移动速度为 r,问从其中一条线段的一个端点移动到另一个线段 的一个端点的最少时间. 分析: 在其中一条线段上 ...
最新文章
- 【青少年编程】陈晓光:打靶游戏
- 【Socket网络编程】17. recv() 函数详解
- 重磅!神策 2018 数据驱动大会报名正式开启!
- 使用lamba中stream 进行分组统计
- python 类中方法总结 --- 实例方法、类方法、静态方法
- C#类、接口、虚方法和抽象方法
- C++对象内存布局测试总结
- DCMTK:Receiving Images from PACS using DCMSCU
- LTE学习:天线端口数目和物理天线数目关系
- 怒爬某 Hub 资源就为撸了一个鉴黄平台
- STAR-CCM+ 计算RAE-2822翼型在FATP巡航状态下不同攻角下的升力系数。
- Request和response的用法总结
- Nginx 配置上传文件大小限制
- Ubuntu怎么切换为中文版
- 基于mini2440嵌入式linux上整合一套Domoticz智能家居系统(八)使用domoticz+mosquitto+Android客户端实现控制mini2440上的LED(一)
- android最新版本6,keep安卓官方最新版
- itext生成打印(操作PDF)
- 漏洞复现----42、Spring Cloud Gateway Actuator API SpEL表达式注入命令执行(CVE-2022-22947)
- STM32F767串口通信------USART中断接收
- Linux软硬链接和软硬限制