POJ 2002 二分 计算几何

Posted Pacify

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 2002 二分 计算几何相关的知识,希望对你有一定的参考价值。

根据正方形对角的两顶点求另外两个顶点公式:

x2 = (x1+x3-y3+y1)/2; y2 = (x3-x1+y1+y3)/2;

x4= (x1+x3+y3-y1)/2; y4 = (-x3+x1+y1+y3)/2;

#include<cstdio>  
#include<cstring>  
#include<algorithm>  
using namespace std;  
const int maxn=1000+5;  
struct Node  
{  
    int x,y;  
    bool operator<(const Node& rhs)const  
    {  
        return x<rhs.x || (x==rhs.x && y<rhs.y);  
    }  
}nodes[maxn];  
  
int main()  
{  
    int n;  
    while(scanf("%d",&n)==1 && n)  
    {  
        int ans=0;//正方形个数  
        for(int i=0;i<n;++i)  
            scanf("%d%d",&nodes[i].x,&nodes[i].y);  
        sort(nodes,nodes+n);  
  
        for(int i=0;i<n;++i)  
        for(int j=i+1;j<n;++j)  
        {  
            Node tmp;//tmp作为正方形的第3或4个点  
            tmp.x=nodes[i].x+nodes[i].y-nodes[j].y;  
            tmp.y=nodes[i].y+nodes[j].x-nodes[i].x;  
            if(!binary_search(nodes,nodes+n,tmp)) continue;  
            tmp.x=nodes[j].x+nodes[i].y-nodes[j].y;  
            tmp.y=nodes[j].y+nodes[j].x-nodes[i].x;  
            if(!binary_search(nodes,nodes+n,tmp)) continue;  
            ++ans;  
        }  
        printf("%d\n",ans/2);
    }  
    return 0;  
} 

 

以上是关于POJ 2002 二分 计算几何的主要内容,如果未能解决你的问题,请参考以下文章

[POJ2398]Toy Storage(计算几何,二分,判断点在线段的哪一侧)

poj2002 (极简单数学/几何+hash)

POJ2318 TOYS (计算几何)

POJ 2002 Squares 数学 + 必须hash

[计算几何]离大海的最远点在哪里

poj1905 Expanding Rods(二分)