http://poj.org/problem?id=2002

题意:给出n组坐标,判断这些坐标能组成的正方形的个数。

思路:参考某大神的想法,先枚举两个点,然后利用公式表示出另外两个点,判断这两个点是否在这n组坐标中,其中查找另两个坐标用的set容器。

已知 (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);

 #include <cstdio>
#include <iostream>
#include <algorithm>
#include <set>
const int N=;
const int maxn=; using namespace std;
struct node
{
long long x;
long long y;
} p[maxn];
int main()
{
int n;
while(~scanf("%d",&n)&&n)
{
int ans = ;
set<long long>tt;
for (int i = ; i < n; i ++)
{
scanf("%lld %lld",&p[i].x,&p[i].y);
tt.insert(p[i].x*N+p[i].y);//将坐标转化成一个数,坐标不同,则这个数就不同
}
for (int i = ; i < n; i ++)
{
int x1 = p[i].x;
int y1 = p[i].y;
for (int j = i+; j < n; j ++)
{
int x2 = p[j].x;
int y2 = p[j].y;
int x3 = x1+(y1-y2);
int y3 = y1-(x1-x2);
int x4 = x2+(y1-y2);
int y4 = y2-(x1-x2);
if (tt.count(x3*N+y3) && (tt.count(x4*N+y4)))// 查找坐标是否存在
++ans;
x3 = x1-(y1-y2);
y3 = y1+(x1-x2);
x4 = x2-(y1-y2);
y4 = y2+(x1-x2);
if (tt.count(x3*N+y3) && (tt.count(x4*N+y4)))
++ans;
}
}
printf("%d\n",ans/);
}
return ;
}

最新文章

  1. HTML的两三事
  2. 推荐12个漂亮的 CSS3 按钮实现方案
  3. session management
  4. Eclipse4.6(Neon) + Tomcat8 + MAVEN3.3.9 + SVN项目完整环境搭建
  5. SQL Server2005中使用XML-数据类型、查询与修改
  6. C# 解压zip压缩文件
  7. 问题:关于一个贴友的js留言板的实现
  8. jdbc_连接数据库
  9. js获取get方式提交的参数返回json格式数据
  10. 什么是mimeType?
  11. poj2505-A multplication game
  12. 记忆2--记忆的&quot;记&quot;和&quot;忆&quot;
  13. Linux进程间通信——使用信号量
  14. python切片练习
  15. WPF异步载入图片,附带载入中动画
  16. js 截取字符串里的ip
  17. php 通过扫描二维码关注公众号
  18. Armitage攻击winxp——P201421410029
  19. 论文笔记: Mutual Learning to Adapt for Joint Human Parsing and Pose Estimation
  20. Objective-C GCD深入理解

热门文章

  1. Zip, Join, GroupJoin
  2. 正文处理命令及tar命令
  3. STL_string用法总结
  4. inflate(int resource, ViewGroup root, boolean attachToRoot)见解
  5. ubuntu下查看如何配置pycharm
  6. kvm virt-install 使用小结
  7. 原来PHP对象比数组用更少的内存
  8. MySql 日志查看与设置
  9. 优雅的退出/关闭/重启gunicorn进程
  10. Leetcode 41.缺失的第一个正数