hdu 4454(三分)
来源:互联网 发布:xy苹果助手for mac 编辑:程序博客网 时间:2024/05/21 11:17
三分有两种写法,一种是平均三分,在区间里分成三等分。
另一种是取中点,再取中点与右端点的中点进行三分。
在这题里,第一种可以过,第二种不能过。
所以以后还是都用平均的三分板子吧
#include<bits/stdc++.h>using namespace std;#define clr(x,y) memset(x,y,sizeof x)const int maxn = 10 + 10;struct Node{double x,y;};#define PI acos(-1.0)#define eps 1e-8Node p,pr,p1,p2;double rr;double dis(Node p1,Node p2){ return sqrt( (p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y));}double get1(double x){ double t = sqrt(rr * rr - (x - pr.x) * (x - pr.x)); double t1 = t + rr,t2 = rr - t; return t1;}double get2(double x){ double t = sqrt(rr * rr - (x - pr.x) * (x - pr.x)); double t1 = t + rr,t2 = rr - t; return t2;}double L,R,High,Low,l,r,high,low;double fun(double angle){ double ret = 1e18; double x = pr.x + rr * cos(angle),y = pr.y + rr * sin(angle); ret = min(ret,dis((Node){x,y},(Node){l,low})); ret = min(ret,dis((Node){x,y},(Node){l,high})); ret = min(ret,dis((Node){x,y},(Node){r,low})); ret = min(ret,dis((Node){x,y},(Node){r,high})); if(x >= l && x <= r)ret = min(ret,fabs(y - high)),ret = min(ret,fabs(y - low)); if(y >= low && y <= high)ret = min(ret,fabs(x - l)),ret = min(ret,fabs(x - r)); return ret + dis((Node){x,y},p);}int main(){ while( ~ scanf("%lf%lf",&p.x,&p.y)) { if(p.x == 0 && p.y == 0)break; scanf("%lf%lf%lf%lf%lf%lf%lf",&pr.x,&pr.y,&rr,&p1.x,&p1.y,&p2.x,&p2.y); l = p1.x,r = p2.x,low = p1.y,high = p2.y; if(l > r)swap(l,r);if(low > high)swap(low,high); L = pr.x - rr,R = pr.x + rr,Low = pr.y - rr,High = pr.y + rr; double LL = 0,RR = 2 * PI; double ans; while((RR - LL) > eps) {// cout << LL << " " << RR << endl; double t = (RR - LL)/3.0; double mid = LL + t,mmid = LL + 2 * t; if(fun(mid) < fun(mmid)) ans = fun(mid),RR = mmid; else ans = fun(mmid),LL = mid; } printf("%.2f\n",ans); } return 0;}
阅读全文
0 0
- hdu 4454(三分)
- HDU 4454 - Stealing a Cake(三分)
- HDU 4454 Stealing a Cake (三分)
- hdu 4454 三分+几何
- 三分学习 hdu 4454
- hdu 4454 #计算几何 三分
- HDU 4454 计算几何 (三分)
- hdu 5531 Rebuild(三分)
- hdu 5531 Rebuild(三分)
- HDU 4454 Stealing a Cake (计算几何+三分)
- hdu 4454 Stealing a Cake(三分妥妥的)
- Hdu 4454 Stealing a Cake(枚举或三分)
- [HDU 4454 Stealing a Cake] 三分套三分
- HDU 3400(搜索题,三分~~初识三分查找)
- hdu 3400 Line belt(三分套三分)
- HDU 3400 Line belt (三分套三分)
- hdu 3400-三分套三分
- hdu 4454 Stealing a Cake (三分)
- 移动 Ubuntu16.04 桌面左侧的启动器到屏幕底部
- 又来了,麦枫版通达OA/office anywhere2017.10.8.171010无限用户破解可定制名称
- 爬虫笔记2(转)BS4库的解析器
- Java多线程编程-(8)-两种常用的线程计数器CountDownLatch和循环屏障CyclicBarrier
- hadoop文件的读写流程
- hdu 4454(三分)
- 第一章课后练习:第二大题(问答题)
- 其他题目---一行代码求两个数的最大公约数
- 保证应用程序只运行一个实例[c#]
- bzoj 3609: [Heoi2014]人人尽说江南好(博弈)
- 线性表、链表的区别
- js数组清空
- 考研数据结构
- 香港科技大学TensorFlow速成(1)