POJ Transmitters(计算几何 极角排序啊)

题目链接:http://poj.org/problem?id=1106

Description

In a wireless network with multiple transmitters sending on the same frequencies, it is often a requirement that signals don‘t overlap, or at least that they don‘t conflict. One way of accomplishing this is to restrict a transmitter‘s coverage area. This problem
uses a shielded transmitter that only broadcasts in a semicircle.

A transmitter T is located somewhere on a 1,000 square meter grid. It broadcasts in a semicircular area of radius r. The transmitter may be rotated any amount, but not moved. Given N points anywhere on the grid, compute the maximum number of points that can
be simultaneously reached by the transmitter‘s signal. Figure 1 shows the same data points with two different transmitter rotations.

All input coordinates are integers (0-1000). The radius is a positive real number greater than 0. Points on the boundary of a semicircle are considered within that semicircle. There are 1-150 unique points to examine per transmitter. No points are at the same
location as the transmitter.

Input

Input consists of information for one or more independent transmitter problems. Each problem begins with one line containing the (x,y) coordinates of the transmitter followed by the broadcast radius, r. The next line contains the number of points N on the grid,
followed by N sets of (x,y) coordinates, one set per line. The end of the input is signalled by a line with a negative radius; the (x,y) values will be present but indeterminate. Figures 1 and 2 represent the data in the first two example data sets below,
though they are on different scales. Figures 1a and 2 show transmitter rotations that result in maximal coverage.

Output

For each transmitter, the output contains a single line with the maximum number of points that can be contained in some semicircle.

Sample Input

25 25 3.5
7
25 28
23 27
27 27
24 23
26 23
24 29
26 29
350 200 2.0
5
350 202
350 199
350 198
348 200
352 200
995 995 10.0
4
1000 1000
999 998
990 992
1000 999
100 100 -2.5

Sample Output

3
4
4

Source

Mid-Central USA 2001

题意:

给定一些点,和一个圆心坐标和半径,求一个半圆能最多能圈下多少点,半圆可绕着圆心任意旋转。

PS:

只需要考虑到圆心距离小于或者等于半径的那些点,

把符合条件的点全部存入一个数组tt[],

然后二重循环枚举每一个点与圆心所连的直线的的左侧有多少个点(叉积),

记录最大值即可。

叉积丶点积:http://blog.csdn.net/y990041769/article/details/38258761

代码如下:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
struct node
{
    double x, y;
} p[100017],tt[100017];

double cross(node A,node B,node C)//叉积
{
    return (B.x-A.x)*(C.y-A.y)-(B.y-A.y)*(C.x-A.x);
}

double dis(node A,node B)//距离
{
    return (A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y);
}

int main()
{
    double r;
    node c;
    while(~scanf("%lf%lf%lf",&c.x,&c.y,&r))
    {
        if(r < 0)
        {
            break;
        }
        int n;
        scanf("%d",&n);
        int k = 0;
        for(int i = 0; i < n; i++)
        {
            scanf("%lf%lf",&p[i].x,&p[i].y);
            double d = dis(c,p[i]);
            if(d <= r*r)
            {
                tt[k].x = p[i].x;
                tt[k].y = p[i].y;
                k++;
            }
        }
        int ansmax = 0;
        for(int i = 0; i < k; i++)
        {
            int cont = 1;
            for(int j = 0; j < k; j++)
            {
                if(i!= j && cross(c,tt[i],tt[j])>=0)
                {
                    cont++;
                }
            }
            if(cont > ansmax)
            {
                ansmax = cont;
            }
        }
        printf("%d\n",ansmax);
    }
    return 0;
}
时间: 2024-08-26 14:46:12

POJ Transmitters(计算几何 极角排序啊)的相关文章

POJ 2398 计算几何+二分+排序

Toy Storage Time Limit: 1000MS  Memory Limit: 65536K Total Submissions: 3953  Accepted: 2334 Description Mom and dad have a problem: their child, Reza, never puts his toys away when he is finished playing with them. They gave Reza a rectangular box t

[POJ2007]Scrambled Polygon(计算几何 极角排序)

题目链接:http://poj.org/problem?id=2007 题意:给出凸包和起点,逆序输出. 极角排序可以用反三角函数求出角度,按照角度排序.也可以用叉乘来做.注意题目说给定第一个数据是0,0,这是凸包的起点,数据中有在x轴负半轴的数据,所以排序的时候0,0要跳过.只排1~n-1个坐标. 1 #include <algorithm> 2 #include <iostream> 3 #include <iomanip> 4 #include <cstri

hdu-5784 How Many Triangles(计算几何+极角排序)

题目链接: How Many Triangles Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 570    Accepted Submission(s): 183 Problem Description Alice has n points in two-dimensional plane. She wants to know ho

HDU 3532 Max Angle(计算几何——极角排序)

传送门 Max Angle Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 704    Accepted Submission(s): 253 Problem Description Given many points in a plane, two players are playing an interesting game. Pl

【计算几何+极角排序+爆ll】E. Convex

https://www.bnuoj.com/v3/contest_show.php?cid=9147#problem/E [题意] 给定n个点的坐标,可以选择其中的四个点构造凸四边形,问最多能构造多少个凸四边形? [思路] 凸四边形的个数等于C(n,4)-凹四边形的个数. 凹四边形的特点是有一个顶点被另外三个顶点围成的三角形包了起来. 所以现在的问题就是找凹四边形. 我们可以枚举每个点,作为被三角形包围的中心点o.怎么找这样包围中心点的三角形? 这样的三角形一定是在存在一条经过中心点的直线,三角

poj 1106 Transmitters (计算几何,叉积||极角排序)

Transmitters Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4817   Accepted: 2576 Description In a wireless network with multiple transmitters sending on the same frequencies, it is often a requirement that signals don't overlap, or at

poj 1696 Space Ant(极角排序)

Space Ant Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3661   Accepted: 2281 Description The most exciting space discovery occurred at the end of the 20th century. In 1999, scientists traced down an ant-like creature in the planet Y19

poj 1696 Space Ant (极角排序)

链接:http://poj.org/problem?id=1696 Space Ant Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3077   Accepted: 1965 Description The most exciting space discovery occurred at the end of the 20th century. In 1999, scientists traced down an a

poj 2007 Scrambled Polygon 极角排序

1 /** 2 极角排序输出,,, 3 主要atan2(y,x) 容易失精度,,用 4 bool cmp(point a,point b){ 5 if(cross(a-tmp,b-tmp)>0) 6 return 1; 7 if(cross(a-tmp,b-tmp)==0) 8 return length(a-tmp)<length(b-tmp); 9 return 0; 10 } 11 **/ 12 #include <iostream> 13 #include <algo