ZOJ
来源:互联网 发布:网络创世纪安卓 编辑:程序博客网 时间:2024/06/06 00:14
Safest Buildings
题目传送门
题意:吃鸡游戏,给出初始圈半径以及圈内的建筑,给你下一个圈的半径r(圈被要求在初始圈内),求最大概率为安全建筑的建筑有那几个。
思路:很简单可以知道,离中心越近越有可能,但事实上在某些范围内概率是相同的当r足够大或者足够小。我们把初始圈叫做大圆,下一个圈为小圆。当2*r大于R时,小圆内切大圆转一圈,可以发现以2*r-R为半径,以原圆心为圆心的圆内的点的安全概率为1即相等。当r<=R-r时,令P圆为小圆内切大圆时圆心围着大圆圆心形成的圆(即小圆圆心的可取范围),再令小圆内切p圆时圆心形成的圆为q圆,这时我们可以知道,q圆内的点的概率为1,(过一点画无数个半径为r的圆,以这些圆的圆心所形成的圆的面积/p圆的面积即为安全概率),而q圆内的圆的都可以形成面积相等的圆即安全概率相等。
#include <iostream>#include <fstream>#include <cstdio>#include <cstring>#include <queue>#include <stack>#include <vector>#include <map>#include <set>#include <cmath>#include <algorithm>#include <functional>#define inf 0x7fffffffusing namespace std;typedef long long ll;const int MAXN=1e5+10;const int MAX=1000+10;const double eps=1e-6;int n,R,r;struct NODE{ int x,y,id; ll dis;}node[MAX];int cmp(NODE a,NODE b){ return a.dis<b.dis;}int main(){ #ifdef ONLINE_JUDGE #else freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); #endif int T; cin>>T; while(T--){ cin>>n>>R>>r; int ans=0,cnt=0; int s[MAX]; for(int i=0;i<n;i++){ scanf("%d%d",&node[i].x,&node[i].y); node[i].dis=(ll)node[i].x*node[i].x+(ll)node[i].y*node[i].y; node[i].id=i+1; } sort(node,node+n,cmp); if(2*r>=R){ int d=2*r-R; d=d*d; for(int i=0;i<n;i++){ if(node[i].dis<=d){ s[cnt++]=node[i].id; } } } else if(r<=R-r){ int d=R-2*r; d=d*d; for(int i=0;i<n;i++){ if(node[i].dis<=d){ s[cnt++]=node[i].id; } } } if(cnt==0){ s[cnt++]=node[0].id; for(int i=1;i<n;i++){ if(node[i].dis==node[0].dis){ s[cnt++]=node[i].id; } } } sort(s,s+cnt); cout<<cnt<<endl; for(int i=0;i<cnt;i++){ if(i==0) cout<<s[i]; else cout<<" "<<s[i]; }cout<<endl; } return 0; }
阅读全文
0 0
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- 八皇后问题
- 3-SUM问题的O(n²)算法
- 欢迎使用CSDN-markdown编辑器
- Django使用redis实现缓存
- 《用python进行员工离职原因分析与预测-----小象学院公开课》
- ZOJ
- mt6735_m0版本modem编译
- Set集合概述与hashset概述
- Struts2文件上传的大小限制问题
- linux免密钥ssh登录
- gulp-connect浏览器自动刷新
- vue prop 父组件向子组件通信
- 手动编译Java hdfs访问程序
- 东东的女朋友(二)(简单解法)