题目链接: http://poj.org/problem?id=2002

  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. const int prime = ;
  5.  
  6. struct Hash_table
  7. {
  8. int x, y;
  9. struct Hash_table *next;
  10. }*Hash[prime];
  11.  
  12. void Hash_insert(int x, int y)
  13. {
  14. int key = (x + y) % prime;
  15. if(Hash[key] == NULL)
  16. {
  17. Hash[key] = new Hash_table;
  18. Hash[key]->x = x;
  19. Hash[key]->y = y;
  20. Hash[key]->next = NULL;
  21. return;
  22. }
  23. struct Hash_table *p = Hash[key];
  24.  
  25. //必须注意!下面几行一定是p->next,如果改成:
  26. /*
  27. while(p != NULL)
  28. p = p->next;
  29. p = new Hash_table;
  30. p->x = x;
  31. p->y = y;
  32. p->next = NULL;
  33. */
  34. //是绝对不行的,因为这里调试了半天了。。。。。。
  35. //正解如下:
  36. while(p->next != NULL)
  37. p = p->next;
  38. p->next = new Hash_table;
  39. p->next->x = x;
  40. p->next->y = y;
  41. p->next->next = NULL;
  42. }
  43.  
  44. bool Hash_search(int x, int y)
  45. {
  46. int key = (x + y) % prime;
  47. struct Hash_table *p = Hash[key];
  48. while(p != NULL)
  49. {
  50. if(p->x == x && p->y == y)
  51. return ;
  52. p = p->next;
  53. }
  54. return ;
  55. }
  56.  
  57. int main()
  58. {
  59. int n, tx, ty, x[], y[];
  60. int x3, x4, y3, y4;
  61. while(scanf("%d", &n) != EOF && n)
  62. {
  63. memset(Hash, , sizeof(Hash));
  64. for(int i = ; i < n; i++)
  65. {
  66. scanf("%d %d", &tx, &ty);
  67. x[i] = tx + ;
  68. y[i] = ty + ;
  69. Hash_insert(x[i], y[i]);
  70. }
  71. int ans = ;
  72. for(int i = ; i < n; i++)
  73. {
  74. for(int j = ; j < n; j++)
  75. {
  76. if(j == i)continue;
  77. x3 = x[i]+(y[i]-y[j]);
  78. y3 = y[i]-(x[i]-x[j]);
  79. x4 = x[j]+(y[i]-y[j]);
  80. y4 = y[j]-(x[i]-x[j]);
  81. if(Hash_search(x3, y3) && Hash_search(x4, y4))
  82. ans++;
  83. }
  84. }
  85. printf("%d\n", ans/);
  86. }
  87. return ;
  88. }

POJ 2002 Squares 哈希的更多相关文章

  1. POJ 2002 Squares【值得摸索的一道二分+点旋转】

    id=2002">Squares 很好的一道二分,事实上本来我是没有思路的,看了基神的题解之后才似乎明确了点. 题意:给出最多有1000个点,问这些点能够组成多少个正方形 分析:先想想 ...

  2. POJ 2002 Squares 解题报告(哈希 开放寻址 & 链式)

    经典好题. 题意是要我们找出所有的正方形.1000点,只有枚举咯. 如图,如果我们知道了正方形A,B的坐标,便可以推测出C,D两点的坐标.反之,遍历所有点作为A,B点,看C,D点是否存在.存在的话正方 ...

  3. poj 2002 Squares 几何二分 || 哈希

    Squares Time Limit: 3500MS   Memory Limit: 65536K Total Submissions: 15137   Accepted: 5749 Descript ...

  4. POJ 2002 Squares 几何, 水题 难度: 0

    题目 http://poj.org/problem?id=2002 题意 已知平面内有1000个点,所有点的坐标量级小于20000,求这些点能组成多少个不同的正方形. 思路 如图,将坐标按照升序排列后 ...

  5. POJ 2002 Squares [hash]

    Squares Time Limit: 3500MS   Memory Limit: 65536K Total Submissions: 16631   Accepted: 6328 Descript ...

  6. POJ 2002 Squares 数学 + 必须hash

    http://poj.org/problem?id=2002 只能说hash比二分快很多.随便一个hash函数都可以完爆二分. 判断是否存在正方形思路如下: 1.枚举任意两个点,作为正方形的一条边,那 ...

  7. POJ 2002 Squares

    二分.... Squares Time Limit: 3500MS Memory Limit: 65536K Total Submissions: 14530 Accepted: 5488 Descr ...

  8. PKU 2002 Squares(二维点哈希+平方求余法+链地址法)

    题目大意:原题链接 给定平面上的N个点,求出这些点一共可以构成多少个正方形. 解题思路: 若正方形为ABCD,A坐标为(x1, y1),B坐标为(x2, y2),则很容易可以推出C和D的坐标.对于特定 ...

  9. Squares - poj 2002(hash)

    枚举两个点作为一条边,求出正方形的另外两个点,利用hash查找另外两个点. #include<stdio.h> #include<string.h> #include<s ...

随机推荐

  1. gulp自己主动化任务脚本在HybridApp开发中的使用

    眼下做前端开发的同学可能都熟悉grunt.fis之类的自己主动化构建工具.事实上在HybridApp开发中我们也能够使用这些工具来简化我们的工作.gulp就是一个比grunt,fis都先进的构建工具. ...

  2. 使用new分配内存的类需要自己定义拷贝构造函数

    13.22 假定我们希望HasPtr的行为像一个值.即,对于对象所指向的string成员,每个对象都有一份自己的拷贝. #include<iostream> #include<str ...

  3. 动作之CCActionInterval(持续动作)家族

    持续动作,顾名思义,就是该动作的执行将持续一段时间.因此持续动作的静态生成函数,往往附带一个时间值Duration. 持续动作类名后缀:一般有两种后缀,一种是To,一种是By.To表示最终达到的目标值 ...

  4. checkbox组件

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  5. Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(五)

    这是本系列的最后一篇,主要讲一下FreeMarker模板引擎的基本概念与常用指令的使用方式.     一.FreemMarker基本概念     FreemMarker是一个用Java语言编写的模板引 ...

  6. 3d max地形建造

    这里来记录一下max里面建造一个地形. 1.创建一个平面,调节平面的属性,包括长宽,和分段 2.然后建造一个道路 然后选择样条线工具,调节线条的轮廓. 3.使用合并工具,将线条和地面进行合并成为一个物 ...

  7. 20151205 jquery 学习笔记--Ajax

    Ajax全称为:“Asynchronous JavaScript and XML”(异步 JavaScript 和 XML), 它并不是 JavaScript 的一种单一技术,而是利用了一系列交互式网 ...

  8. android开发者博客二月Android Studio2.0测试

    参考网页-http://android-developers.blogspot.com/2016/02/android-studio-20-beta.html Android Studio 2.0-B ...

  9. 用 SQL 计算时间差值

    ;WITH res1 AS ( SELECT * FROM ( SELECT ROW_NUMBER() OVER (PARTITION BY F2 ORDER BY F1) AS rn,F1,F2 F ...

  10. Html+CSS命名规范:

     Html+CSS命名规范: 1.样式命名: 2.样式文件命名: