zoukankan      html  css  js  c++  java
  • poj2002

    题意:给出一些平面上点的坐标,用其中的点做顶点,求其中能组成正方形的个数。

    分析:每次枚举两个点,用hash看另外两个点存不存在。

    View Code
    #include <iostream>
    #include
    <cstdio>
    #include
    <cstdlib>
    #include
    <cstring>
    usingnamespace std;

    #define maxn 1005

    struct XPoint
    {
    int x, y;
    } point[maxn];

    struct Hash
    {
    XPoint p;
    Hash
    *next;
    } h[maxn];

    int n, ans;

    int hash(XPoint &a)
    {
    return ((a.x + a.y) % maxn + maxn) % maxn;
    }

    void ins(XPoint &a)
    {
    Hash
    *temp =new Hash();
    int index = hash(a);
    temp
    ->p.x = a.x;
    temp
    ->p.y = a.y;
    temp
    ->next = h[index].next;
    h[index].next
    = temp;
    }

    void input()
    {
    for (int i =0; i < n; i++)
    {
    scanf(
    "%d%d", &point[i].x, &point[i].y);
    ins(point[i]);
    }
    }

    bool exist(XPoint &a)
    {
    Hash
    *temp = h[hash(a)].next;

    while (temp)
    {
    if (temp->p.x == a.x && temp->p.y == a.y)
    returntrue;
    temp
    = temp->next;
    }
    returnfalse;
    }

    void work()
    {
    ans
    =0;
    for (int i =0; i < n -1; i++)
    for (int j = i +1; j < n; j++)
    {
    XPoint a, b;
    a.x
    = point[j].y - point[i].y + point[i].x;
    a.y
    = point[i].x - point[j].x + point[i].y;
    b.x
    = a.x + point[j].x - point[i].x;
    b.y
    = a.y + point[j].y - point[i].y;
    if (exist(a) && exist(b))
    ans
    ++;
    a.x
    = point[i].x *2- a.x;
    a.y
    = point[i].y *2- a.y;
    b.x
    = a.x + point[j].x - point[i].x;
    b.y
    = a.y + point[j].y - point[i].y;
    if (exist(a) && exist(b))
    ans
    ++;
    }
    ans
    /=4;
    }

    int main()
    {
    //freopen("t.txt", "r", stdin);
    while (scanf("%d", &n), n)
    {
    memset(h,
    0, sizeof(h));
    input();
    work();
    printf(
    "%d\n", ans);
    }
    return0;
    }
  • 相关阅读:
    CodeForces
    [SDOI2018] 战略游戏
    bzoj3786: 星系探索
    bzoj4383: [POI2015]Pustynia
    bzoj4353: Play with tree
    bzoj4336: BJOI2015 骑士的旅行
    bzoj4381: [POI2015]Odwiedziny
    codechef January Lunchtime 2017简要题解
    bzoj 3867: Nice boat
    3069: [Pa2011]Hard Choice 艰难的选择
  • 原文地址:https://www.cnblogs.com/rainydays/p/2073779.html
Copyright © 2011-2022 走看看