题目链接: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奇小的题目来说复杂度基本上无视,只要不是指数级就应该都能过)

附代码:

View Code

#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相关推荐

  1. 数论六之计算几何——An Easy Problem,Ancient Berland Circus,Open-air shopping malls

    可检验模板正确度 An Easy Problem?! Ancient Berland Circus Open-air shopping malls An Easy Problem?! problem ...

  2. hdu 3264(二分+圆相交面积)

    题意:给出一些圆,选择其中一个圆的圆心为圆心,然后画一个大圆,要求大圆最少覆盖每个圆的一半面积.求最小面积. 解题思路:首先枚举每个圆,以其圆心作为大圆的圆心,然后再用二分去寻找最小的半径. #inc ...

  3. ACM计算几何题目推荐

    //第一期 计算几何题的特点与做题要领: 1.大部分不会很难,少部分题目思路很巧妙 2.做计算几何题目,模板很重要,模板必须高度可靠. 3.要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面 ...

  4. POJ 计算几何入门题目推荐

      其实也谈不上推荐,只是自己做过的题目而已,甚至有的题目尚未AC,让在挣扎中.之所以推荐计算几何题,是因为,本人感觉ACM各种算法中计算几何算是比较实际的算法,在很多领域有着重要的用途(例如本人的专 ...

  5. 计算几何相关资料+题目推荐(不定期补充)

    旋转卡壳:http://blog.csdn.net/accry/article/details/6070626 计算几何题目推荐:http://blog.csdn.net/accry/article/ ...

  6. 计算几何问题 java_【转载】ACM计算几何题目推荐

    2107    Quoit Design    典型最近点对问题 POJ    3714    Raid    变种最近点对问题 B,最小包围圆 最小包围圆的算法是一种增量算法,期望是O(n). ZO ...

  7. poj计算几何题推荐

    POJ 计算几何入门题目推荐(转)       其实也谈不上推荐,只是自己做过的题目而已,甚至有的题目尚未AC,让在挣扎中.之所以推荐计算几何题,是因为,本人感觉ACM各种算法中计算几何算是比较实际的 ...

  8. acm 计算几何题目集合

    //第一期 计算几何题的特点与做题要领: 1.大部分不会很难,少部分题目思路很巧妙 2.做计算几何题目,模板很重要,模板必须高度可靠. 3.要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面 ...

  9. ACM计算几何专项练习题目总结

    //第一期 计算几何题的特点与做题要领: 1.大部分不会很难,少部分题目思路很巧妙 2.做计算几何题目,模板很重要,模板必须高度可靠. 3.要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面 ...

最新文章

  1. 我明明只是在努力工作,却被同事说成是“卷王”!!!
  2. 第十四周项目三-数组类模板
  3. 柏堰工业园有做机器人的吗_合肥柏堰科技园推进机器人应用 促产业转型升级...
  4. 《系统集成项目管理》第十三章 项目合同管理
  5. 王佩丰第2讲-excel单元格格式设置 笔记
  6. python 基础(二)
  7. python字符串的删除操作_Python字符串操作
  8. 拓端tecdat|R语言主成分分析(PCA)葡萄酒可视化:主成分得分散点图和载荷图
  9. 身份证前6位对应的省市区代码(超详细)
  10. 中信银行c语言笔试题库,中信银行笔试IT类复习题参考资料带答案解析.doc
  11. 【ASP.NET】第十课——网站的配制与部署
  12. 自认为隐藏在计算机补码中的秘密(原来这么简单)
  13. CleanMyMac X免费吗?怎么下载2023最新版
  14. SAS学习第9章:卡方检验之适合性检验与独立性检验
  15. FlexRay网络唤醒、启动和错误管理
  16. Can not construct instance of com.h.dog.entity.Message: no int/Int-argument constructor/factory meth
  17. 推荐这几个硬核大佬,过年抢他们红包
  18. TEC-XP 汇编学习
  19. 时隔一个月,讯飞星火大模型 V1.5 发布:星火 APP 登场,综合能力三大升级!
  20. 伊朗APT组织的网络间谍工具源代码和攻击者被泄露和曝光

热门文章

  1. (11) ejb学习: Jpa事务管理类型 container 和 bean
  2. (1)谷歌2011校园招聘:
  3. 这样准备面试,薪资比预期至少多拿20%!
  4. visio保存后公式变形_涨姿势了!仿真变形后的模型还能保存下来
  5. vb获取textbox数字_Spectrum仪器PCIe数字化仪可额外扩展8个数字输入
  6. 《美团编程题》丢失的三个数
  7. Python装饰器学习(九步入门)
  8. 浦银行面试总结(信息科技部)
  9. 第21课:中文自然语言处理的应用、现状和未来
  10. mysql中ifnull和hive中if函数的转换