• POJ 2002 Squares



    二分。。。。
    Squares
    Time Limit: 3500MSMemory Limit: 65536K
    Total Submissions: 14530Accepted: 5488

    Description

    A square is a 4-sided polygon whose sides have equal length and adjacent sides form 90-degree angles. It is also a polygon such that rotating about its centre by 90 degrees gives the same polygon. It is not the only polygon with the latter property, however, as a regular octagon also has this property. 

    So we all know what a square looks like, but can we find all possible squares that can be formed from a set of stars in a night sky? To make the problem easier, we will assume that the night sky is a 2-dimensional plane, and each star is specified by its x and y coordinates. 

    Input

    The input consists of a number of test cases. Each test case starts with the integer n (1 <= n <= 1000) indicating the number of points to follow. Each of the next n lines specify the x and y coordinates (two integers) of each point. You may assume that the points are distinct and the magnitudes of the coordinates are less than 20000. The input is terminated when n = 0.

    Output

    For each test case, print on a line the number of squares one can form from the given stars.

    Sample Input

    4
    1 0
    0 1
    1 1
    0 0
    9
    0 0
    1 0
    2 0
    0 2
    1 2
    2 2
    0 1
    1 1
    2 1
    4
    -2 5
    3 7
    0 0
    5 2
    0

    Sample Output

    1
    6
    1

    Source

    Rocky Mountain 2004 

    枚举两个点计算另外俩个,二分查找。。。。。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>

    using namespace std;

    struct node
    {
        int x,y;
    }p[1100],p1,p2;

    int n,cnt;

    bool cmp(node a,node b)
    {
        if(a.x!=b.x) return a.x<b.x;
        return a.y<b.y;
    }

    bool findp(node a)
    {
        int s=0,t=n-1,m;
        int X=a.x,Y=a.y;
        while(s<=t)
        {
            m=(s+t)/2;
            if(p
    .x==X&&p
    .y==Y) return true;
            if(p
    .x<X||(p
    .x==X&&p
    .y<Y)) s=m+1;
            else t=m-1;
        }
        return false;
    }

    int main()
    {
        while(scanf("%d",&n)!=EOF&&n)
        {
            cnt=0;
            for(int i=0;i<n;i++)
            {
                scanf("%d%d",&p.x,&p.y);
            }
            sort(p,p+n,cmp);
            for(int i=0;i<n;i++)
            {
                for(int j=i+1;j<n;j++)
                {
                    p1.x=p.x+p[j].y-p.y; p1.y=p.y+p.x-p[j].x;
                    p2.x=p[j].x+p[j].y-p.y; p2.y=p[j].y+p.x-p[j].x;
                    if(!findp(p1)) continue;
                    if(findp(p2)) cnt++;
                }
            }
            printf("%d ",cnt/2);
        }
        return 0;
    }
    * This source code was highlighted by YcdoiT. ( style: Codeblocks )
  • 相关阅读:
    Mysql升级过程的问题
    关于SSM项目注解事务不回滚的问题
    Linux环境下tomcat如何热部署
    Windows系统下python3中安装pyMysql
    jvm性能监控及故障处理工具(《深入理解java虚拟机》)
    jvm垃圾回收器(《深入理解java虚拟机》)
    jvm-运行时数据区域(《深入理解java虚拟机》)
    java源码分析-String
    java源码分析-Object
    2019秋季PAT甲级题解(无第一题)
  • 原文地址:https://www.cnblogs.com/CKboss/p/3350865.html
Copyright © 2020-2023  润新知