题意:
给你n 个点的坐标,让你去算一下,能够形成多少个正方形
思路:
1.枚举两个点,然后推出那两个的坐标,这样会有重复的,最后需要除以4
已知: (x1,y1) (x2,y2)
则: x3=x1+(y1-y2) y3= y1-(x1-x2)
x4=x2+(y1-y2) y4= y2-(x1-x2)
或
x3=x1-(y1-y2) y3= y1+(x1-x2)
x4=x2-(y1-y2) y4= y2+(x1-x2)
数学公式,也是看的网上的,自己没去推,同学们不要学我啊2. 点的寻找要用哈希的方法,链地址法还是啥搞不懂,我用的是数组模拟链表,除法散列法
求 key 的值的时候用的平方求于法
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define mod 100007
int tmp;
struct node
{
int x, y;
int next;
}ls[1010],a[1010];
int head[mod];
void add(int x,int y)
{
int key = (x*x + y*y)%mod;
if(head[key]==-1)
{