n个点

求其中有几个正方形

n<1000

暴力4个点就不行了

大概2个点还可以

根基(x*x+y*y)%素数 hash 一下

告诉你2个点求 另外2个点 画个图推一下

重复要/2;

 #include<stdio.h>
#include<algorithm>
#include<vector> using namespace std; #define mod 10007
struct point
{
int x,y; }x[]; vector<point>hash[mod]; void insert(int a)
{
int h=(x[a].x*x[a].x+x[a].y*x[a].y)%mod;
hash[h].push_back(x[a]);
}
bool cmp(point a,point b)
{
if(a.x==b.x)
return a.y<b.y;
return a.x<b.x;
}
bool search(int a,int b)
{
int h=(a*a+b*b)%mod;
for(int i=;i<hash[h].size();i++)
{
if(hash[h][i].x==a&&hash[h][i].y==b)
return true;
}
return false;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF&&n)
{
for(int i=;i<mod;i++)
hash[i].clear(); for(int i=;i<=n;i++)
{
scanf("%d%d",&x[i].x,&x[i].y);
insert(i);
}
int cnt=;
sort(x+,x+n+,cmp);
for(int i=;i<=n;i++)
{
for(int j=i+;j<=n;j++)
{
int x1,y1,x2,y2;
x1=x[i].x-(x[j].y-x[i].y);
y1=x[i].y+(x[j].x-x[i].x);
x2=x[j].x-(x[j].y-x[i].y);
y2=x[j].y+(x[j].x-x[i].x);
if(search(x1,y1)&&search(x2,y2))
cnt++; }
}
printf("%d\n",cnt/);
} return ;
}

最新文章

  1. powerdesigner,eclipse整合安装
  2. Thymeleaf+SpringMVC,如何从模板中获取数据
  3. KlayGE 4.4中渲染的改进(五):OpenGL 4.4和OpenGLES 3
  4. Android Studio 简单设置
  5. java微信接口之五—消息分组群发
  6. ASP.NET MVC(二)
  7. 作业 for liao
  8. OC: 数组、集合、字典
  9. golang语言部分保留字的举例
  10. 需要知道的开源的框架-IOS
  11. 你必须掌握的Java基础:JSON解析工具-json-lib
  12. AXIS2远程调用WebService示例(Eclipse+AXIS)
  13. mysqlclient和PyMySQL对比
  14. A Simple Game
  15. MySql获取所有表名
  16. CentOS6.5安装图形用户界面
  17. ubuntu (14.04) 卸载 gnome 系统桌面
  18. Grid布局20行代码快速生成瀑布流
  19. Netty核心概念(10)之内存管理
  20. Eclipse编译快捷键

热门文章

  1. Google类VR设备知识
  2. using语法糖
  3. Zookeeper的学习材料
  4. js+JQuery实现返回顶部功能
  5. win7登录后开机密码破解读取
  6. Linux虚拟机突然不能上网了
  7. 【转】mysql触发器的实战(触发器执行失败,sql会回滚吗)
  8. wcf的诡异问题
  9. Map集合 总结
  10. SQLServer 分布式查询MySQL