博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CF1059D Nature Reserve(二分)
阅读量:4956 次
发布时间:2019-06-12

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

简洁翻译:

有N个点,求与y=0相切的,包含这N个点的最小圆的半径

 

题解

二分半径右端点开小了结果交了二十几次都没A……mmp……

考虑一下,显然这个半径是可以二分的

再考虑一下,如果所有点都在y轴同一侧就有解,否则肯定无解

然后现在只要考虑在y轴同一侧时某一个半径是否能够包含所有点即可

因为得和y轴相切,所以半径确定时,圆心的y坐标是确定的

然后我们考虑对于每一个点,圆心的x坐标必须处在什么范围内

设这个点坐标为(x,y),圆半径为r,如果y>2*r显然不行

然后用勾股定理算一下两点之间的x坐标最多相差多少,那么就可以知道圆心的x坐标在什么范围内了

然后所有的范围并起来,如果是空集不可行,否则可行

然后注意判断x坐标相差多少时候的写法……代码里写了……

1 //minamoto 2 #include
3 using namespace std; 4 template
inline bool cmin(T&a,const T&b){
return a>b?a=b,1:0;} 5 template
inline bool cmax(T&a,const T&b){
return a
>n;22 for(int i=1;i<=n;++i){23 cin>>x[i]>>y[i];24 if(y[i]>0) flag1=1;25 if(y[i]<0) flag2=1;26 }27 if(flag1&&flag2) return puts("-1"),0;28 if(flag2){29 for(int i=1;i<=n;++i) y[i]=-y[i];30 }31 int times=500;32 while(times--){33 double mid=(l+r)/2;34 if(check(mid)) ans=mid,r=mid;35 else l=mid;36 }37 printf("%.10lf\n",ans);38 return 0;39 }

 

转载于:https://www.cnblogs.com/bztMinamoto/p/9761260.html

你可能感兴趣的文章
20180104-高级特性-Slice
查看>>
6个SQL Server 2005性能优化工具介绍
查看>>
nginx启动、关闭命令、重启nginx报错open() "/var/run/nginx/nginx.pid" failed
查看>>
day14 Python 内置函数、匿名函数和递归函数
查看>>
BZOJ 3097 Hash Killer I
查看>>
UINavigationController的视图层理关系
查看>>
html阴影效果怎么做,css 内阴影怎么做
查看>>
宏观经济
查看>>
译:面试投行的20个Java问题
查看>>
综合练习:词频统计
查看>>
BZOJ1026: [SCOI2009]windy数
查看>>
ASP.NET应用程序和ASP.NET网站所共有的文件: App_Browsers 等
查看>>
ASP.NET杂货店实战视频 VS2010+SQL2008 三层架构设计开发讲解
查看>>
样板操作数
查看>>
64位UBUNTU下安装adobe reader后无法启动
查看>>
动态缓存技术之CSI,SSI,ESI
查看>>
mac 上将.pem文件转为.pub文件
查看>>
整理下心情
查看>>
iTextSharp带中文转换出来的PDF文档显示乱码
查看>>
阶乘因式分解(一)
查看>>