博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 4454 Stealing a Cake
阅读量:4552 次
发布时间:2019-06-08

本文共 1761 字,大约阅读时间需要 5 分钟。

 简单的计算几何;

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

也可以用三分;

1 #include
2 #include
3 #include
4 #define pi acos(-1) 5 #define eps 1e-6 6 using namespace std; 7 8 struct node 9 {10 double x,y;11 node(double x=0,double y=0):x(x),y(y){ }12 bool operator<(const node &t)const13 {14 if(x==t.x)return y
0)return length(v3);40 else return fabs(cross(v1,v2))/length(v1);41 }42 43 44 45 node a,yuan,d[4];46 double r;47 double dis(double alph)48 {49 node tmp;50 tmp.x=yuan.x+r*cos(alph);51 tmp.y=yuan.y+r*sin(alph);52 double dd1=min(disofnode(tmp,d[0],d[1]),disofnode(tmp,d[0],d[2]));53 double dd2=min(disofnode(tmp,d[1],d[3]),disofnode(tmp,d[2],d[3]));54 double ret=min(dd1,dd2);55 return (ret+length(a-tmp));56 }57 58 int main()59 {60 while(scanf("%lf%lf",&a.x,&a.y))61 {62 if(dcmp(a.x)==0 && dcmp(a.y)==0)break;63 scanf("%lf%lf",&yuan.x,&yuan.y);64 scanf("%lf",&r);65 double x1,x2,y1,y2;66 scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);67 d[0].x=x1,d[0].y=y1;68 d[1].x=x2,d[1].y=y1;69 d[2].x=x2,d[2].y=y2;70 d[3].x=x1,d[3].y=y2;71 sort(d,d+4);72 double mi=0.0,ma=2*pi;73 double ans=9999999999.0;74 for(int i=0;i<=5000;i++)75 {76 double mm=(2*pi*i)/5000;77 double fd=dis(mm);78 ans=min(ans,fd);79 // double m1=mi+(ma-mi)/3;//三分的代码80 // double m2=ma-(ma-mi)/3;81 // if(dis(m1)>dis(m2))mi=m1;82 // else ma=m2;83 }84 printf("%.2lf\n",ans);85 }86 return 0;87 }
View Code

 

转载于:https://www.cnblogs.com/yours1103/p/3402764.html

你可能感兴趣的文章
Dynamics CRM 给视图配置安全角色
查看>>
Eclipse修改已存在的SVN地址
查看>>
C++ ACM基础
查看>>
(转)使用 python Matplotlib 库绘图
查看>>
进程/线程切换原则
查看>>
正则表达式语法
查看>>
20165301 2017-2018-2 《Java程序设计》第四周学习总结
查看>>
Vue的简单入门
查看>>
urllib 中的异常处理
查看>>
【SQL Server高可用性】高可用性概述
查看>>
通过SQL Server的扩展事件来跟踪SQL语句在运行时,时间都消耗到哪儿了?
查看>>
SQL优化:重新编译存储过程和表
查看>>
PCB“有铅”工艺将何去何从?
查看>>
Solr环境搭建
查看>>
垂直居中的几种实现方法
查看>>
UILabel标签文字过长时的显示方式
查看>>
H5离线缓存机制-manifest
查看>>
比较:I/O成员函数getline() 与 get()(第二种用法)的用法异同
查看>>
201671010118 2016-2017-2《Java程序设计》 第十一周学习心得
查看>>
Get Sauce(状压DP)
查看>>