题意:给出一些圆,选择其中一个圆的圆心为圆心,然后画一个大圆,要求大圆最少覆盖每个圆的一半面积。求最小面积。

解题思路:首先枚举每个圆,以其圆心作为大圆的圆心,然后再用二分去寻找最小的半径。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;const int maxn = 20;
const double eps = 1e-8;
const double pi = 3.14159265;
struct Circle
{double x,y,r;
}p[maxn];
int n;  double dist(double x1,double y1,double x2,double y2)
{return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}double Area(double x0,double y0,double radius,Circle p)
{double d = dist(x0,y0,p.x,p.y);if(d >= radius + p.r) return 0;else if(d <= fabs(radius - p.r)) return min(radius,p.r) * min(radius,p.r) * pi;//计算两个角度double a = acos((radius * radius + d * d - p.r * p.r) / (2 * radius * d));double b = acos((p.r * p.r + d * d - radius * radius) / (2 * p.r * d));return radius * radius * a + p.r * p.r * b - radius * d * sin(a);
}bool Check(int k,double radius)
{for(int i = 1; i <= n; i++)if(Area(p[k].x,p[k].y,radius,p[i]) < p[i].r * p[i].r * pi / 2.0)return false;return true;
}int main()
{int t;scanf("%d",&t);while(t--){scanf("%d",&n);double l,r,mid,ans = 9999999.0;for(int i = 1; i <= n; i++)scanf("%lf%lf%lf",&p[i].x,&p[i].y,&p[i].r);for(int i = 1; i <= n; i++) //枚举圆心{l = 0, r = 500000;while(r - l > eps){mid = (l + r) / 2.0;if(Check(i,mid) == true){ans = min(ans,mid);r = mid;}else l = mid;}}printf("%.4f\n",ans);}return 0;
}

hdu 3264(二分+圆相交面积)相关推荐

  1. Square Card 计算几何-两圆相交面积

    题意 : 给两个圆,分别代表得分区域和奖励区域,边长为a的正方形以均等概率扔到平面后绕中心旋转,保证一定会有某时刻正方形完全在得分区域内. 如果某时刻正方形完全落在区域内,获得相应分数,求正方形 既获 ...

  2. 求两圆相交面积(模板)

    两圆相交分如下集中情况:相离.相切.相交.包含. 设两圆圆心分别是O1和O2,半径分别是r1和r2,设d为两圆心距离.又因为两圆有大有小,我们设较小的圆是O1. 相离相切的面积为零,代码如下: dou ...

  3. HDU 4404 Worms(多边形和圆相交)

    题意:略 思路:多边形与圆相交我记得好像是转化成圆与三角形相交,然后再求: 代码: #include <bits/stdc++.h> using namespace std;const i ...

  4. 求任意两圆相交的面积(不限程序设计语言版本)

    无所谓程序设计语言,不过是表达形式不一罢了 题目来源 理论知识 参考知识: 代码实现 C# 鼠标悬停此处预览测试样例 Java 鼠标悬停于此预览测试样例 Kotlin C++ C Python Jav ...

  5. NYOJ 1186 心理阴影(两个圆环的相交面积)

    心理阴影 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 自从shanghai reginal后,zkc学长的心理就有了阴影.什么不敢水题,不敢gj,不敢放松...(各种 ...

  6. 牛客网暑期ACM多校训练营(第三场) J Distance to Work 计算几何求圆与多边形相交面积模板...

    链接:https://www.nowcoder.com/acm/contest/141/J 来源:牛客网 Eddy has graduated from college. Currently, he ...

  7. 平面上有两个圆相交,求两个圆相交部分的面积

    平面上有两个圆相交,求两个圆相交部分的面积 又学习了一遍算法,感触颇深,也对算法有了更进一步的认识,记录一下这次的学习,希望能帮到有需要的人. 输入:六个参数:第一个圆的圆心坐标,半径,第二个圆的圆心 ...

  8. 两圆相交求面积 hdu5120

    转载 两圆相交分如下集中情况:相离.相切.相交.包含. 设两圆圆心分别是O1和O2,半径分别是r1和r2,设d为两圆心距离.又因为两圆有大有小,我们设较小的圆是O1. 相离相切的面积为零,代码如下: ...

  9. 算法分析课设(一)平面上有两个圆相交,求两个圆相交部分的面积

    写出算法的文字描述 第一步:输入两个圆的参数 x1. y1. r1. x2. y2. r2. 第二步:计算两圆的距离d,然后分以下四种情况判断: 1.相离或相切.若d>=(r1+r2),则 s= ...

最新文章

  1. Structured Streaming编程 Programming Guide
  2. JavaScript在发送ajax请求时,URL域名地址是使用绝对地址还是相对地址?什么是浏览器跨域访问操作,js如何实现?
  3. 用C++写的 Levenshtein 算法实现
  4. 四步解读python生成器
  5. BugKuCTF WEB 本地包含
  6. linux sz到指定的机器,linux 机器之间 zssh, rz, sz互相传输讲解
  7. VC++下使用ADO编写数据库程序 – 操作大全
  8. redis的内存优化【转】
  9. ————————————————————————动态规划——————————————————————1003——————————...
  10. java职称考试试题_SSM框架下的JAVA职称考试模拟系统
  11. 基于ping++第三方集成各类支付
  12. TYUT-A专题题解(二)
  13. Linux ALSA声卡驱动
  14. word参考文献的引用
  15. 5月地图软件影响力报告:百度谷歌搜狗居前三甲
  16. LeetCode刷题攻略
  17. LSTM调参经验(细读)
  18. R语言如何做独立样本t检验
  19. safari浏览网页打开速度很慢如何解决
  20. 6.在SAP Web上实现Punchout目录采购(第一部分)

热门文章

  1. 行业精英聚首谈智慧营销:团队打造、管理策略、权力分配、成功因素、IT 治理……...
  2. 混合云存储开启企业上云新路径--阿里云混合云备份容灾方案发布 1
  3. 2016windows(10) wamp 最简单30分钟thrift入门使用讲解,实现php作为服务器和客户端的hello world...
  4. WAS6集群部署及初步测试
  5. Ivan D Jankovic PhD Studentship** Application
  6. what to do next?
  7. why wechat is not a good place for the learning, but csdn is
  8. <<温泉屋的小老板娘>>观后感
  9. 【转】汇编语言学习笔记一:CS和IP寄存器
  10. es6新语法Object.assign()