POJ 1106 极角排序

题意给出一些点片段圆心为t半径为r的半圆最大能覆盖多少个点。

首先在输入的时候把距离大于半径的点筛出去。剩余点通过极角排序然后枚举半圆的一条边通过该点能覆盖的点数取最大值就可以了。

#include <iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct point
{
    int x,y;
};
int Direction(point a,point b,point c)
{
    return (b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x);
}
int adistan(point a,point b)
{
    return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}
point t,data[2000];
bool cmp(point a,point b)
{
    if(Direction(t,a,b)>=0)
        return 1;
    return 0;
}
int main()
{
    double r;
    int n;
    while(~scanf("%d%d%lf",&t.x,&t.y,&r),r>=0)
    {
        scanf("%d",&n);
        int w=0,maxnum=0;
        while(n--)
        {
            point temp;
            scanf("%d%d",&temp.x,&temp.y);
            if((double)adistan(temp,t)<=r*r)
                data[w++]=temp;
        }
        sort(data,data+w,cmp);
        for(int i=w; i<w+w; i++)
            data[i]=data[i-w];
        for(int i=0; i<w; i++)
        {
            int num=1;
            for(int j=i+1; j<w+i; j++)
            {
                if(Direction(t,data[i],data[j])<0)
                    break;
                num++;
            }
            maxnum=max(maxnum,num);
        }
        printf("%d\n",maxnum);
    }
    return 0;
}
时间: 2024-10-27 17:40:43

POJ 1106 极角排序的相关文章

POJ 2007 极角排序

题意:给出一个凸包的顶点,以第一次输入进去的点按逆时针方向排序. 看到有人说是凸包题,题意已经明确是凸包的顶点所以没有必要再用Graham模板.利用叉积的性质对极角进行排序就可以. #include <iostream> #include<cstdio> #include<algorithm> using namespace std; struct point { int x,y; }; int Direction(point a,point b,point c) {

UVa 755 / POJ 1002 487--3279 (排序)

755 - 487--3279 Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=98&page=show_problem&problem=696 http://poj.org/problem?id=1002 Businesses like to have memorable telephone numbers. On

poj 1094 Sorting It All Out(拓扑排序)

链接: http://poj.org/problem?id=1094 题目: Sorting It All Out Time Limit: 1000MS     Memory Limit: 10000K Total Submissions: 21532     Accepted: 7403 Description An ascending sorted sequence of distinct values is one in which some form of a less-than ope

poj 2780 Linearity 【高效版 同一条直线上的点】

这道题才真的没有那么的水,可能因为测试数据很多,然后又每个数据有1000个点要处理,用O(n^3)的三重循环直接TLE掉了... 所以得另想办法,后来参考了一下别人的想法,得用极角排序,一个sort()就可以了,极角为0的因为无法做分母,所以得单独考虑,终于AC... AC的代码: #include <stdio.h> #include <iostream> #include <algorithm> using namespace std; int x[1002],y[

POJ 1228 凸包

这题考察凸包的理解,题意让求一个凸包上每条边都有三个点,如果少于三个点那么凸包就不确定了,三点以上如果再加一个点就形成不了凸包了.通过极角排序完然后求跟凸包的相邻两点共线的点有没有就可以了,写得比较挫... (1)此题需要判断"凸包上每条边至少包含原多边形三个点".成立就是"YES". 我试的判断"多边形上 所有点 在凸包上",WA!! (2)注意:所有点共线时,结果为"NO". (3)另外由上面(1)判断可的,n<=5

平面上有n个点 如何寻找距离最远的两个点

一.问题描述 平面上有n个点,如何寻找距离最远的两个点? 二.解题思路 第一步,寻找凸包(因为最远距离的两个点一定在凸包上) 第二步,用旋转卡(qia)壳 寻找距离最大的点 凸包和旋转卡壳算法参见http://blog.csdn.net/kaytowin/article/details/5140111 三.代码实现 #include<iostream> #include<vector> #include<algorithm> #include<cmath>

POJ:DNA Sorting 特殊的排序

Description One measure of ``unsortedness'' in a sequence is the number of pairs of entries that are out of order with respect to each other. For instance, in the letter sequence ``DAABEC'', this measure is 5, since D is greater than four letters to

POJ 3544 Journey with Pigs:贪心及排序不等式

Journey with Pigs http://poj.org/problem?id=3544 Time Limit: 1000MS Memory Limit: 65536K Description Farmer John has a pig farm near town A. He wants to visit his friend living in town B. During this journey he will visit n small villages so he decid

POJ 1375 过一点求圆切线极角

题意:给出一点,几个圆的圆心半径,问两条切线与x轴相交组成的区间,然后合并一下. 这题我用解析做,精度损失的太高wa,然后又用极角做,还是精度问题,不过好把数的值扩大一些加上了eps之后过了. 具体看代码. #include <iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; struct se