【定径圆覆盖最多点模板】

原创 2012年03月24日 01:27:17


#define eps 1e-9
#define pi acos(-1.0)
#define N 222
struct point{
    double x,y;
}p[N];
struct alpha{
    double v;
    bool flag;
    bool friend operator <(const alpha &a,const alpha &b){//排序专用偏序关系
       return a.v < b.v;
    }
}alp[N * 2];

double dis(point a, point b){
    return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
int n;
void solve(double R){//传入定径圆的半径
    int ans = 0;
    double theta,phi,dist;
    for(int i = 0;i < n;i++){
       int k = 0;
       for(int j = 0;j < n;j++){
           if(i == j) continue;
           dist = dis(p[i],p[j]);
           if(dist > 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(dist / (2.0 * R));
           alp[k].v = theta - phi + 2 * pi;
           alp[k].flag = true;
           alp[k + 1].v = theta + phi + 2 * pi;
           alp[k + 1].flag = false;
           k += 2;
       }
       sort(alp,alp + k);
       int sum = 0;
       for(int j = 0;j < k;j++){
           if(alp[j].flag)
              sum ++;
           else
              sum --;
           if(sum > ans)
              ans = sum;
       }
    }
    printf("%d\n",ans + 1);
}



















相关文章推荐

用最少圆覆盖所有点问题

2. 海面上有一些船需要与陆地进行通信,需要在海岸线上布置一些基站。现将问题抽象为,在x周上方,给出N条船的坐标p1,p2,…,pn,pi=(xi,yi),xi>=0,yi...

点的覆盖圆

1.问题提出已知平面上8个点的坐标为:(3,6) (7,2) (9,5) (1,7) (3,1) (8,2) (4,5) (2,8),试求覆盖8个点的覆盖圆的最小半径。2.设计思路①若最小圆的圆周上只...
  • jqmczx
  • jqmczx
  • 2011年05月09日 20:39
  • 1495

贪心法部分背包问题的实现

1. 给定n个物品,物品价值分别为P1,P2,…,Pn,物品重量分别为W1,W2,…,Wn,背包容量为M。每种物品可部分装入到背包中。输出X1,X2,…,Xn, 0...

poj1981-单位圆最多覆盖点

计算几何题。昨天的比赛题,这类题数据不会特别大,只要能推出公式,就能解。 比赛时,只顾着找模版,没有认真去分析题。期间想到过解题思路,由于不自信,没有去实现!!!! 解题思路: 根据最远两点确定...

算法题:顶点覆盖问题

顶点覆盖问题可以用几种不同的算法来实现,本篇文章使用的是分支限界法来实现,或许以后会介绍其他的实现算法,嘿嘿。   1.问题描述 给定一个N个点M条边的无向图G(点的编号从1至N),问是否存在一...

最小圆覆盖算法

算法目的:最小圆覆盖算法可以在线性时间复杂度内求出覆盖n个点的最小圆算法步骤:      ①首先现将所有点随机排列     ②按顺序把点一个一个的加入(一步一步的求前i个点的最小覆盖圆),每加入一个...
  • commonc
  • commonc
  • 2016年08月23日 16:05
  • 2020

【单位圆覆盖最多点】POJ 1981

经典几何体,求单位圆最多覆盖点数。 这里用O(n^3)算法,闻说有O(n^2*logn),但不会搞。 方法:枚举任意两点,以此为弦做新圆,(ps:不能以弦中心做圆,因为这圆不是最大的)接着就枚举所...
  • leolin_
  • leolin_
  • 2011年09月04日 21:08
  • 1071

POJ1981Circle and Points【单位圆能覆盖的最多点】

Language: Default Circle and Points Time Limit: 5000MS   Memory Limit: 30000K Total Submissio...

android 多点触摸(实现按下画圆,抬起消失的dome)

这次呢,我们来做一个dome,使用多点触摸实现按下画圆,抬起消失的效果我们先来缕一下思路:我们可以有一个圆的实体类,里面定义好圆的圆心坐标,半径,颜色,透明度的属性,具体代码如下:package co...

Android系列之手机多点触摸画圆

静态效果图:(多个手指按下和抬起的状态) 代码实现部分: 1、先写个实体类,设置相关的属性 package com.zking.laci.android19_pointstouc...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【定径圆覆盖最多点模板】
举报原因:
原因补充:

(最多只允许输入30个字)