题意:在一个半径为R的大圈里会随机的刷出半径为r的安全区,这个小圆(半径r)一定在大圆内(半径R),给n个建筑物,要求输出安全率最高的建筑的数目和编号

思路: 
第一点:以每一个建筑为圆心,以r为半径作一个圆O1,这个圆O1内或者圆上的点都可以它本身为圆心,以r为半径作一个圆O2使这个建筑在这个圆O2内(安全区内),所以题目可以转化为 看哪个建筑的圆O1的面积大。如图A,B两个建筑物,明显A的圆O1面积大于B的圆O1面积,A的概率就大于B(这只是这样理解,还不是最终思路) 
 
第二点:因为题意要求这个小圆(安全区)一定全部在大圆内,如图,大圆圆心0与建筑物A的距离为dis,圆A上离圆心最远的点到圆心的距离为dis+r,只要dis+2*r<=R,就能满足这个圆A上所有的点做一个以r为半径的小圆,都能在大圆内(即满足条件)。如果都不满足这个条件,只要比较每一建筑到圆心的距离就行,谁距离近,就概率大。 
 
然后这个dis+2*r<=R,并不可以直接比较,因为如果求dis用了sqrt,即使用double储存,也会损失精度,A不了。所以可以变为 比较 dis*dis<=(R-2*r)*(R-2*r),用int储存。

第三点:还有一个特例,当R=r时,圆内所有点的概率都相同。

Sample Input 

3 10 5 
3 4 
3 5 
3 6 
3 10 4 
-7 -6 
4 5 
5 4 
Sample Output 



2 3

https://blog.csdn.net/qq_36300700/article/details/78524605?locationNum=9&fps=1

#include <iostream>
#include <stdio.h>
#include <math.h>using namespace std;const int maxn = 100+5;
const int INF = 0x3f3f3f3f;
int x[maxn],y[maxn];int T,n,R,r,m,ans[maxn];
int dis[maxn],flag;int sum(int i)
{int sum1,sum2;sum1=dis[i];sum2=R*R+4*r*r-4*R*r;if(sum1<=sum2)return 1;return 0;
}
int main()
{scanf("%d",&T);while(T--){scanf("%d%d%d",&n,&R,&r);flag =INF;m=0;for(int i=1; i<=n; i++){scanf("%d%d",&x[i],&y[i]);dis[i] =x[i]*x[i]+y[i]*y[i];flag=min(dis[i],flag);}if(R!=r){for(int i=1; i<=n; i++){if(sum(i))ans[m++]=i;}if(m){printf("%d\n",m);for(int i=0; i<m-1; i++)printf("%d ",ans[i]);printf("%d\n",ans[m-1]);}else{for(int i=1; i<=n; i++){if(dis[i]==flag)ans[m++]=i;}printf("%d\n",m);for(int i=0; i<m-1; i++)printf("%d ",ans[i]);printf("%d\n",ans[m-1]);}}else{printf("%d\n",n);for(int i=1; i<n; i++)printf("%d ",i);printf("%d\n",n);}}return 0;
}

ZOJ-3993 Safest Buildings相关推荐

  1. M - Safest Buildings ZOJ -概率+计算几何

    M - Safest Buildings ZOJ - 3993 题意:"吃鸡"游戏,给出两个半径R,r,R表示第一次的大圈半径,r表示第二次的小圈半径. 第一次大圈的圆心位于(0, ...

  2. Safest Buildings (思维)

    链接:https://ac.nowcoder.com/acm/problem/14377 来源:牛客网 PUBG is a multiplayer online battle royale video ...

  3. ZOJ 3993 2017CCPC秦皇岛 M:Safest Buildings

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3993 题意: 给你一个圆心为(0, 0),半径为R的大圈,里面有 ...

  4. Safest Buildings ZOJ - 3993

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3993 之前舍友和我说的这个题 当时第一反应是求圆的面积交 果断掉坑里..只 ...

  5. 2017CCPC秦皇岛 M:Safest Buildings

    CCPC 2017秦皇岛 简单题, 题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3993 题意: 给你一个圆心为 ...

  6. ZOJ 1104 Leaps Tall Buildings

    题目大意:给出一些建筑物的高度与宽度,求出一条最矮的抛物线运动轨迹,能够跨过所有的建筑物. 输出初速度与水平方向的夹角,以及初速度的大小. 重力加速度取9.8m/(s^2) 思路: 因为该抛物线过固定 ...

  7. ZOJ - 3993-Safest Buildings

    题目链接 题意: 给你一个圆形区域和他的半径,在这个区域内会重新刷新一个区域(完全包含,可内切),再给你区域内的n个点,求这些点包含在新区域内的概率最大的点有哪些,全部输出. 思路: 首先判断刷新区域 ...

  8. 【转载】图论 500题——主要为hdu/poj/zoj

    转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  9. zoj 1088 System Overload

    约瑟夫环 (josephus problem )问题,有公式 可以直接套用 我使用暴力破解方法求解(用时3秒多). 代码如下: /* zoj 1088 System Overload */ #incl ...

最新文章

  1. GPT-3到来,程序员会被AI取代吗?
  2. 4、CSS 高级语法
  3. virtualenv在Ubuntu18.10(64位)中的用法(命令和图形化建立虚拟环境)
  4. linux c之用命名管道实现进程通信
  5. 数数题(计数类 DP)做题记录
  6. 【转】LCS和LCS服务器应用程序概述
  7. java8中stream中的任务拆分
  8. 解决 Electron 包下载太慢问题
  9. string-indexOf、substring、split
  10. Zookeeper可以干什么
  11. html给看板娘添加语音,给网页添加看板娘
  12. Pycharm Professional Edition 激活码(license),有效期至2018年01月30日
  13. 基于Edman降解的蛋白质测序法的用途详解
  14. 专题:2019世界移动通信大会(MWC)精彩纷呈,中国企业各出大招
  15. 货币供应量M1M2与上证综合指数之间的相关性图示
  16. html实践手机调试
  17. 华龙进城 一家河北农村草根起家的企业发展史(图)
  18. 2008中国互联网十大网络流行词
  19. 汽车电子系统网络安全指南与汽车信息物理融合系统网络安全指南
  20. 智融SW6206、SW3516、SW3522、SW2303等快充市场方案应用

热门文章

  1. python中变量的定义、命名_python中变量的定义、命名
  2. 【持续更新】Markdown中数学公式及符号整理
  3. GuiLite学习参考借鉴
  4. Yul语言及对象说明——Solidity中文文档(9)
  5. 游戏任务设计(1):概念与简史
  6. 七牛云和阿里云OSS存储图片服务器使用
  7. 开源NoSQL数据库ArangoDB浅析
  8. STM32学习总结之IO控制
  9. IOS xib和代码自定义UIView
  10. Qt-认清信号槽的本质