zoukankan      html  css  js  c++  java
  • [hash] PKU 2002 Squares

    此题数据范围其实很小,枚举主对角线,求出另两个点的坐标,看是否存在(所有点都不相同);

    hash的模版写法:

    # include <stdio.h>
    # include <string.h>
    
    # define odd(x) (((x)+100000)&0x1)
    
    # define MAXN 1005
    # define MOD 10007
    
    int n;
    int x[MAXN], y[MAXN];
    int head[MOD], next[MAXN];
    
    int hash(int xx, int yy)
    {
        int hkey = xx*13131 + yy;
        return (hkey%MOD + MOD)%MOD;
    }
    
    void init_hash_table(void)
    {
        memset(head, 0, sizeof(head));
    }
    
    void insert_hash_table(int i)
    {
        int h = hash(x[i], y[i]);
        next[i] = head[h];
        head[h] = i;
    }
    
    int lookup_hash_table(int hkey, int xx, int yy)
    {
        int u = head[hkey];
        while (u)
        {
            if (x[u]==xx && y[u]==yy) return u;
            u = next[u];
        }
        return 0;
    }
    
    void init(void)
    {
        int i;
        init_hash_table();
        for (i = 1; i <= n; ++i)
        {
            scanf("%d%d", &x[i], &y[i]);
            insert_hash_table(i);
        }
    }
    
    void solve(void)
    {
        int i, j, k, ans = 0, xx, yy, t;
        for (i = 1; i < n; ++i)
        for (j = i+1; j <= n; ++j)
        {
            xx = x[i]+x[j]+y[j]-y[i];
            yy = y[i]+y[j]-x[j]+x[i];
            if (odd(xx) || odd(yy)) ;
            else if (k = lookup_hash_table(hash(xx>>1, yy>>1), xx>>1, yy>>1))
            {
                xx = x[i]+x[j]-y[j]+y[i];
                yy = y[i]+y[j]+x[j]-x[i];
                if (odd(xx) || odd(yy)) ;
                else if (lookup_hash_table(hash(xx>>1, yy>>1), xx>>1, yy>>1))
                    ++ans;
            }
        }
        printf("%d\n", ans>>1);
    }
    
    int main()
    {
        while (scanf("%d", &n), n)
        {
            init();
            solve();
        }
        
        return 0;
    }

     

  • 相关阅读:
    W phase 学习
    有限破裂矩张量的发展历史
    Capjoint
    JavaScript之Function类型
    ThreadLocal学习资料
    Shiro学习资料
    jstl学习资料
    分页框架pager-taglib学习笔记
    MyBatis3学习笔记(曹锋老师版)
    关于处理日期格式化问题遇到的一个坑
  • 原文地址:https://www.cnblogs.com/JMDWQ/p/2652516.html
Copyright © 2011-2022 走看看