【题目链接】:http://hihocoder.com/problemset/problem/1508

【题意】

【题解】



求一个半径为R的圆能够覆盖的平面上的n个点中最多的点数;

O(N2log2N)的复杂度;



【Number Of WA】



0



【完整代码】

#include <bits/stdc++.h>
using namespace std;
#define Mn 2030//平面点集中点数
#define rep1(i,x,y) for (int i = x;i <= y;i++)
const double eps = 1e-9;//精度调高点没跑~
const double pi = acos(-1.0);
#define sqr(x) ((x) * (x)) struct point
{
double x,y;
double friend dis(const point &a,const point &b)
{
return sqrt(sqr(a.x - b.x) + sqr(a.y - b.y));
}
}p[Mn + 5]; struct alpha {
double v;
bool flag;
bool friend operator <(const alpha &a,const alpha &b)//排序专用偏序关系
{
return a.v < b.v;
}
}alp[Mn * Mn + 5];//C(N,2)*2的可能交点(可能极角) int n;
double R;//半径 int main()
{
//freopen("F:\\rush.txt","r",stdin);
cin >> n >> R;
rep1(i,1,n)
cin >> p[i].x >> p[i].y;
int MAX = 0;
rep1(i,1,n)
{
int t = 0;
rep1(j,1,n)
{
if(i == j)
continue;
double theta,phi,D;
D = dis(p[i],p[j]);
if(D > 2.0 * R)//距离超界直接秒杀
continue;
//关键部分
theta = atan2(p[j].y - p[i].y,p[j].x - p[i].x);
if(theta < 0)
theta += 2 * pi;
phi = acos(D / (2.0 * R));
t++;
alp[t].v = theta - phi + 2 * pi;
alp[t].flag = true;
t++;
alp[t].v = theta + phi + 2 * pi;
alp[t].flag = false;
}
sort(alp+1,alp + 1 + t);
int sum = 0;
rep1(j,1,t)
{
if(alp[j].flag)
sum ++;
else
sum --;
if(sum > MAX)
MAX = sum;
}
}
printf("%d\n",MAX + 1);
return 0;
}

最新文章

  1. Tomcat服务无法启动的问题
  2. Javascript学习笔记:2种其他类型转换为数字Number类型的方式
  3. Scrum Meeting 11-20151217
  4. 请使用java来构造和遍历二叉树?
  5. 使用coverage工具统计python单元测试覆盖率
  6. 我的vim配置文件.vimrc
  7. ZBrush中必须记住的常用快捷键
  8. 学号160809212姓名田京诚C语言程序设计实验2选择结构程序设计
  9. [转]JAVA程序员一定知道的优秀第三方库(2016版)
  10. hydra
  11. 非托管C++通过C++/CLI包装调用C# DLL
  12. C#-将控件动态添加到选项卡页tablepage
  13. bzoj3673 bzoj3674可持久化并查集
  14. EntityFrameowk6.1 使用enum和低版本的不同
  15. [Oracle] 常用工具集之 - SQL*Loader
  16. anjular分页组件tm-pagination的使用
  17. linux学习笔记 其他常用命令
  18. python框架之Django(4)-视图&amp;路由
  19. React-将元素渲染到 DOM 中
  20. jquery 进阶 bootstrap

热门文章

  1. ALSA声卡驱动中的DAPM详解之六:精髓所在,牵一发而动全身
  2. YTU 2769: 结构体--成绩统计
  3. WPF-使用面板控制内容布局,比较Canvas,WrapPanel,StackPanel,Grid,ScrollViewer
  4. ognl表达式注意事项
  5. hcode视频教程中心(学习h5和hbuilder等)
  6. [转]Android定时刷新UI界面----Handler
  7. 使用Jquery.form.js ajax表单提交插件弹出下载提示框
  8. P1257 平面上的最接近点对
  9. Floyd模板
  10. Java我来了