题目链接

题意 : 给你很多点和一个半径r,这个半径为r的圆能覆盖的最多的点是多少。

思路 : 对每个点做半径为 r 的圆, 求交集,交集最多的区域的被覆盖次数就是能覆盖的最多的点。贴两个链接,分析的挺好代码写得挺好

 #include <stdio.h>
#include <string.h>
#include <math.h>
#include <iostream>
#include <algorithm> using namespace std ; const double eps = 1e- ;
const double PI = acos(-1.0) ;
int n ;
double r ; struct point
{
double x,y ;
}p[] ;
struct node
{
double angle ;
int flag ;
}q[] ; inline int dcmp(double d)
{
return d < -eps ? - : d > eps ;
}
bool cmp(const node &a,const node &b)//角度区间排序
{
if(dcmp(a.angle-b.angle) == ) return a.flag > b.flag ;
return a.angle < b.angle ;
}
double Sqrt(double x)
{
return x*x ;
}
double dist(const point &a,const point &b)
{
return sqrt(Sqrt(a.x-b.x)+Sqrt(a.y-b.y)) ;
} int main()
{
while(~scanf("%d %lf",&n,&r))
{
if(n == ) break ;
for(int i = ; i < n ; i++)
scanf("%lf %lf",&p[i].x,&p[i].y) ;
int ans = ;
for(int i = ; i < n ; i++)
{
int m = ;
for(int j = ; j < n ; j++)
{
if(i == j) continue ;
double d = dist(p[i],p[j]) ;
if(d > *r+0.001) continue ;
double s = atan2(p[j].y-p[i].y,p[j].x-p[i].x) ;
if(s < ) s += *PI ;//角度区间修正
double ph = acos(d/2.0/r) ;//圆心角转区间
q[m++].angle = s - ph + *PI ;q[m-].flag = ;
q[m++].angle = s + ph + *PI ;q[m-].flag = - ;
}
sort(q,q+m,cmp) ;
int sum = ;
for(int j = ; j < m ; j++)
ans = max(ans,sum += q[j].flag) ;
}
printf("It is possible to cover %d points.\n",ans+) ;
}
return ;
}

HDU 1883 Phone Cell (圆覆盖最多点)的更多相关文章

  1. HDU 1883 Phone Cell(计算几何)

    方法:选取一个点A,以点A为圆心做一个半径为r的圆,然后枚举另一个点B,以B为圆心做一个圆,如果这两个圆有交集,那我们在这个交集内选取一个点做半径为r的圆,这个圆就包括了A和B点,找到交集最多的区域并 ...

  2. HDU 4063 线段与圆相交+最短路

    Aircraft Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  3. hdu 5091 给定矩形覆盖尽量多点 扫描线+线段树

    http://acm.hdu.edu.cn/showproblem.php?pid=5091 给你10000以内的敌舰的坐标(即分别为x,y),要求用W*H的矩形去围住一个区域,使得这个区域内的敌舰最 ...

  4. HDU 2295 Radar (重复覆盖)

    Radar Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  5. hdu 1255(线段树 扫描线) 覆盖的面积

    http://acm.hdu.edu.cn/showproblem.php?pid=1255 典型线段树辅助扫描线,顾名思义扫描线就是相当于yy出一条直线从左到右(也可以从上到下)扫描过去,此时先将所 ...

  6. hdu - 3498 - whosyourdaddy(反复覆盖DLX)

    题意:N(2 ≤ N ≤ 55)个点,M(0 ≤ M ≤ N*N)条无向边,删除一个点会把与其相邻的点一起删掉.问最少删几次能够删掉全部点. 题目链接:pid=3498">http:/ ...

  7. Comet OJ 茶颜悦色 线段树+扫描线(矩形覆盖最多点+优化)

    题目:https://www.cometoj.com/contest/59/problem/D?problem_id=2713 题意:给你一个正方形,然后给你n个点,这个正方形能随意放哪,要求那个正方 ...

  8. HDU 3111 Sudoku(精确覆盖)

    数独问题,输入谜题,输出解 既然都把重复覆盖的给写成模板了,就顺便把精确覆盖的模板也写好看点吧...赤裸裸的精确覆盖啊~~~水一水~~~然后继续去搞有点难度的题了... #include <cs ...

  9. HDU 2295.Radar (DLX重复覆盖)

    2分答案+DLX判断可行 不使用的估计函数的可重复覆盖的搜索树将十分庞大 #include <iostream> #include <cstring> #include < ...

随机推荐

  1. Session id实现通过Cookie来传输方法及代码参考

    1. Web中的Session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间.因此从上述的定义中我们可以看到,Session实际上是一个特定的 ...

  2. firebug调试js时提示调试器未激活处理办法

    firebug是web开发中最常用的分析调试软件,不过我今天使用在调试百度在线编辑器UEditor时一直提示调试器未激活. 从使用经验来看不应该啊,我都下了断点了为什么会提示调试器未激活呢!多次载入网 ...

  3. svn 服务器的搭建 on Ubuntu

    Subversion 如何在Ubuntu下安装配置Subversion服务器.已经配置好,不过没有配置开机自启动, 需要的时候,使用如下命令开启svn服务svnserve -d  -r  /opt/s ...

  4. Eclipse 调试maven test

    在eclipse中调试maven test 一般情况下,使用如下方式都不能使myeclipse检测到程序中的断点: 项目 -> Run As -> maven test 或 项目 -> ...

  5. Cocos2d-x中创建SQLite数据库

    我们下边介绍如何通过SQLite3提供的API实现MyNotes数据库创建.创建数据库一般需要经过如下三个步骤.(1) 使用sqlite3_open函数打开数据库.(2) 使用sqlite3_exec ...

  6. how to Enable Client Integration

    i got a problem,the problem is list cant use export to excel button in sharepoint 2010. I found my a ...

  7. [DevExpress]ChartControl之滚动条示例

    关键代码: /// <summary> /// 设置ChartControl滚动条[默认X,Y轴都出现] /// </summary> /// <param name=& ...

  8. foreach的原理

    1.foreach 语句对实现 System.Collections .IEnumerable 或 System.Collections.Generic .IEnumerable <T > ...

  9. (转载)用SQL语句创建Access表

    <来源网址:http://www.delphifans.com/infoview/Article_220.html>用SQL语句创建Access表 很久以前弄的,用了一天的时间,没有什么技 ...

  10. iphone开发第二个程序

    此程序包括UIProgressView,UIButton, UIDatePicker,UIAlert,UILabel,NSTimer // //  HViewController.h //  Btn_ ...