HDU 3264 Open-air shopping malls
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3264
题目大意:给出平面上n个圆的圆心和半径,求一个大圆,它的圆心与某个给定圆的圆心重合,且对于每一个给定的圆,大圆至少覆盖面积的一半,求出满足要求的大圆的最小半径。
分析:由于所求的大圆圆心只有n种选择,我们可以枚举大圆的圆心,然后求能够满足要求的最小半径,取半径最小的方案即可。
直接求满足要求的最小半径比较困难,但若我们已经知道一个半径,判断它时候覆盖了每一个圆至少一半的面积,问题就简单那多了。如果不会求圆的重合面积的话请移步 http://www.cnblogs.com/evan-oi/archive/2012/03/14/2395989.html
所以枚举圆心之后,二分查找圆的最小半径就可以了。总时间复杂度为O(n^2logL),L为查找的区间长度(对于这种n奇小的题目来说复杂度基本上无视,只要不是指数级就应该都能过)
附代码:
#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<cmath>using namespace std;#define MaxN 25#define INF 20000000#define pi 3.141592653#define zero 1e-8struct atp{double x,y,r; }p[MaxN];int n;double ans;void init(){ scanf("%d",&n);for (int i=1;i<=n;i++) scanf("%lf%lf%lf",&p[i].x,&p[i].y,&p[i].r); } inline double dis(atp a,atp b){return sqrt( (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); } double calc(atp a,double ra,atp b){double t=0,d,rb=b.r; d=dis(a,b);if (ra<rb) swap(ra,rb);if (d>=ra+rb) return 0;if (d<=ra-rb) return pi*rb*rb; double t1=acos((ra*ra+d*d-rb*rb)/(2*ra*d));double t2=acos((rb*rb+d*d-ra*ra)/(2*rb*d)); t=t1*ra*ra+t2*rb*rb-d*ra*sin(t1);return t; } bool check(int x,double r){for (int i=1;i<=n;i++)if (2*calc(p[x],r,p[i]) <pi*p[i].r*p[i].r) return false;return true; } double get(int i){double l,r,mid; l=0;r=30000;while (l+zero<=r) { mid=(l+r)/2;if (check(i,mid)) r=mid-zero; else l=mid+zero; }return mid; } void work(){double tans;ans=INF;for (int i=1;i<=n;i++) {tans=get(i);if (ans>tans) ans=tans;} printf("%.4lf\n",ans); }int main(){ freopen("in","r",stdin); freopen("out","w",stdout);int Case; scanf("%d",&Case);while (Case--) init(),work();return 0; }
转载于:https://www.cnblogs.com/evan-oi/archive/2012/03/14/2396027.html
HDU 3264 Open-air shopping malls相关推荐
- 数论六之计算几何——An Easy Problem,Ancient Berland Circus,Open-air shopping malls
可检验模板正确度 An Easy Problem?! Ancient Berland Circus Open-air shopping malls An Easy Problem?! problem ...
- hdu 3264(二分+圆相交面积)
题意:给出一些圆,选择其中一个圆的圆心为圆心,然后画一个大圆,要求大圆最少覆盖每个圆的一半面积.求最小面积. 解题思路:首先枚举每个圆,以其圆心作为大圆的圆心,然后再用二分去寻找最小的半径. #inc ...
- ACM计算几何题目推荐
//第一期 计算几何题的特点与做题要领: 1.大部分不会很难,少部分题目思路很巧妙 2.做计算几何题目,模板很重要,模板必须高度可靠. 3.要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面 ...
- POJ 计算几何入门题目推荐
其实也谈不上推荐,只是自己做过的题目而已,甚至有的题目尚未AC,让在挣扎中.之所以推荐计算几何题,是因为,本人感觉ACM各种算法中计算几何算是比较实际的算法,在很多领域有着重要的用途(例如本人的专 ...
- 计算几何相关资料+题目推荐(不定期补充)
旋转卡壳:http://blog.csdn.net/accry/article/details/6070626 计算几何题目推荐:http://blog.csdn.net/accry/article/ ...
- 计算几何问题 java_【转载】ACM计算几何题目推荐
2107 Quoit Design 典型最近点对问题 POJ 3714 Raid 变种最近点对问题 B,最小包围圆 最小包围圆的算法是一种增量算法,期望是O(n). ZO ...
- poj计算几何题推荐
POJ 计算几何入门题目推荐(转) 其实也谈不上推荐,只是自己做过的题目而已,甚至有的题目尚未AC,让在挣扎中.之所以推荐计算几何题,是因为,本人感觉ACM各种算法中计算几何算是比较实际的 ...
- acm 计算几何题目集合
//第一期 计算几何题的特点与做题要领: 1.大部分不会很难,少部分题目思路很巧妙 2.做计算几何题目,模板很重要,模板必须高度可靠. 3.要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面 ...
- ACM计算几何专项练习题目总结
//第一期 计算几何题的特点与做题要领: 1.大部分不会很难,少部分题目思路很巧妙 2.做计算几何题目,模板很重要,模板必须高度可靠. 3.要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面 ...
最新文章
- 我明明只是在努力工作,却被同事说成是“卷王”!!!
- 第十四周项目三-数组类模板
- 柏堰工业园有做机器人的吗_合肥柏堰科技园推进机器人应用 促产业转型升级...
- 《系统集成项目管理》第十三章 项目合同管理
- 王佩丰第2讲-excel单元格格式设置 笔记
- python 基础(二)
- python字符串的删除操作_Python字符串操作
- 拓端tecdat|R语言主成分分析(PCA)葡萄酒可视化:主成分得分散点图和载荷图
- 身份证前6位对应的省市区代码(超详细)
- 中信银行c语言笔试题库,中信银行笔试IT类复习题参考资料带答案解析.doc
- 【ASP.NET】第十课——网站的配制与部署
- 自认为隐藏在计算机补码中的秘密(原来这么简单)
- CleanMyMac X免费吗?怎么下载2023最新版
- SAS学习第9章:卡方检验之适合性检验与独立性检验
- FlexRay网络唤醒、启动和错误管理
- Can not construct instance of com.h.dog.entity.Message: no int/Int-argument constructor/factory meth
- 推荐这几个硬核大佬,过年抢他们红包
- TEC-XP 汇编学习
- 时隔一个月,讯飞星火大模型 V1.5 发布:星火 APP 登场,综合能力三大升级!
- 伊朗APT组织的网络间谍工具源代码和攻击者被泄露和曝光