平面上n个点,半径为r的圆最多能覆盖几个点
来源:互联网 发布:modern php 中文版 编辑:程序博客网 时间:2024/04/29 12:16
炸弹袭击
时限:1s
【题目描述】
H族的领地是一片富饶之地,有丰富的资源,无数的黄金。尽管异族侵略者被压制几百多年,他们并没有放弃对这片土地的渴望。最近,他们研制了一枚重磅炸弹。试图用它摧毁H族的防御工事。H族的防御工事由多个基地构成,侵略者试图用炸弹摧毁尽量多的防御基地,现在,他们急需你的帮助。如果你能为他们解决难题,会有巨大的奖励。(该炸弹的攻击范围是一个半径为r单位的圆)
【输入】
第一行为样例的个数T。
每个样例中有若干行,第一行为炸弹的攻击半径r,r有可能不是整数(1<=r<=100)
第二行是一个整数n,表示H族防御基地的个数(1<=n<=100)
接下来n行,每行有两个数,代表H族某个防御基地的坐标
【输出】
只有一个数,代表炸弹能最多摧毁的H族防御基地数量。
【输入样例】
1
1
3
1 0
0 1
4 0
【输出样例】
2
#include<iostream>#include<cmath>using namespace std;#define eps 1e-8int r,num;struct Point{double x,y;Point(){}Point(double tx,double ty){x=tx;y=ty;}}p[200];double dist(Point p1,Point p2){return sqrt(pow(p1.x-p2.x,2)+pow(p1.y-p2.y,2));}Point GetCircleCenter(Point p1,Point p2){Point mid = Point((p1.x+p2.x)/2,(p1.y+p2.y)/2);double angle = atan2(p1.x-p2.x,p2.y-p1.y);double d = sqrt(r*r-pow(dist(p1,mid),2));return Point(mid.x+d*cos(angle),mid.y+d*sin(angle));}int max(int a,int b){if(a>b)return a;return b;}int main(){int n;cin>>n;while(n--){cin>>r;cin>>num;int i,j;for(i=0;i<num;i++)cin>>p[i].x>>p[i].y;int ans = 1;for(i=0;i<num;i++){for(j=i+1;j<num;j++){if(dist(p[i],p[j]) > 2.0*r) continue;Point center = GetCircleCenter(p[i],p[j]);int cnt = 0;for(int k=0;k<num;k++)if(dist(center,p[k]) < 1.0*r+eps) cnt++;ans = max(ans,cnt);}}cout<<ans<<endl;}return 0;}同类型题目:
POJ 1981 Circle and Points(单位圆覆盖n^3&&n^2lgn)
0 0
- 平面上n个点,半径为r的圆最多能覆盖几个点
- 数轴上从左到右有n个点a[0],a[1]…,a[n-1],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点。要求算法复杂度为o(n)。
- 数轴上从左到右有n个点a[0],a[1]…,a[n-1],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点。要求算法复杂度为o(n)。
- [经典面试题][百度]数轴上从左到右有n各点a[0], a[1], ……,a[n -1],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点。
- [经典面试题][百度]数轴上从左到右有n各点a[0], a[1], ……,a[n -1],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点。
- 坐标轴上从左到右依次的点为a[0]、a[1]、a[2]……a[n-1],设一根木棒的长度为L,求L最多能覆盖坐标轴的几个点?
- 【随机数应用之】在半径为R的圆内找随机n个点
- 平面上N个点,知道其浮点数坐标,求一个圆恰好覆盖其中k个点
- 数轴上从左到右有n个点、a[0] a[1]……a[n-1]给定一根长度为l绳子、求绳子最多覆盖其中几个点
- 求绳子最多能覆盖的点
- POJ1981Circle and Points【单位圆能覆盖的最多点】
- 覆盖最多的直线上的点
- 数轴上覆盖最多点的数目
- 关于n个平面最多分空间为几个部分的问题的讨论
- 给定平面上的N个点,寻找距离最远的两个点
- 给定平面上的N个点,寻找距离最远的两个点
- 给定平面上的N个点,寻找距离最远的两个点
- UVALive 3695 Distant Galaxy 用矩阵的边覆盖二维平面上最多的点 科学的枚举
- Vuforia SDK全面更新:3.0版可实时生成虚拟场景和物体
- 微软潜心修行win9 寄望能够力挽狂澜
- SDK 使用详解
- 基于Flume的美团日志收集系统(一)架构和设计
- 序列相关的趣题 之一
- 平面上n个点,半径为r的圆最多能覆盖几个点
- Linux 下OCCI( Oracle C++ Call Interface )安装和使用
- 如何 搭建 RMAN 备份平台
- pdf转换成word转换器免费版
- /usr/bin/env: php: No such file or directory
- 在Button上、下、左、右位置添加图片和文字
- android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事项
- JAVA解析VCF格式
- Q8.5