zoukankan      html  css  js  c++  java
  • 解题报告——POJ 2002

    Squares
    Time Limit: 3500MS   Memory Limit: 65536K
    Total Submissions: 16908   Accepted: 6425

    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
    -------------------------------------------------------------------
    这道题的原意应该是用哈希数组解决,不过我做了将近一天还是没有AC,不是WA就是RE,等技术娴熟了再来做吧~
    这道题可以用二分法来做:将点集进行排序,然后用二分法进行查找。
    大致思路:按照先x后y的顺序对点集进行排序,循环选择两个点,然后计算出第三、四个点可能存在的位置,用二分法查找这样的点是否存在,若存在则计数加一。最后根据同一正方形被重复计数的次数,将计数除以相应的次数。
    代码如下:
    ------------------------------------------------------------------
     1 #include <cstdio>
     2 #include <algorithm>
     3 
     4 using namespace std;
     5 
     6 #define N 1001
     7 
     8 struct Node
     9 {
    10     int x, y;
    11 }node[N];
    12 
    13 Node temp;
    14 
    15 bool cmp(Node X, Node Y)
    16 {
    17     if(X.x == Y.x)
    18     {
    19         return X.y < Y.y;
    20     }
    21     return X.x < Y.x;
    22 }
    23 
    24 int main()
    25 {
    26     int n, sum = 0;
    27     freopen("D:\test.txt", "r", stdin);
    28     while(scanf("%d", &n) != EOF && n)
    29     {
    30         sum = 0;
    31         for(int i = 0; i < n; i++)
    32         {
    33             scanf("%d%d", &node[i].x, &node[i].y);
    34         }
    35         sort(node, node + n, cmp);
    36         for(int i = 0; i < n; i++)
    37         {
    38             for(int j = i + 1; j < n; j++)
    39             {
    40                 temp.x = node[j].x + node[i].y - node[j].y;
    41                 temp.y = node[j].y + node[j].x - node[i].x;
    42                 if(!binary_search(node, node + n, temp, cmp))
    43                 {
    44                     continue;
    45                 }
    46                 temp.x = node[i].x + node[i].y - node[j].y;
    47                 temp.y = node[i].y + node[j].x - node[i].x;
    48                 if(binary_search(node, node + n, temp, cmp))
    49                 {
    50                     sum++;
    51                 }
    52             }
    53         }
    54         printf("%d
    ", sum / 2);
    55     }
    56 }
  • 相关阅读:
    面向对象(二)
    关于CURL的初步认识
    Mysql数据库进阶之(分表分库,主从分离)
    解决mysql:Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)
    git的那些事
    今天我们来聊聊svn的使用
    基于CentOS6.8版本配置真实域名的方法
    WDCP v3 安装
    Ubuntu无法ssh远程连接问题 (转)
    Linux运维入门到高级全套系列PDF
  • 原文地址:https://www.cnblogs.com/codingpenguin/p/4295102.html
Copyright © 2011-2022 走看看