POJ 2002 Squares
来源:互联网 发布:php程序员自我评价 编辑:程序博客网 时间:2024/06/06 02:42
之前没怎么做过这种几何的题目,这次通过这道题也是知道了一些简单的做几何题目的思考方向,本题就是在一大堆点中找正方形,值得注意的是正方形有可能是斜着的= =
大体思路是对点进行枚举,先按照横纵坐标从小到大的顺序排序,然后对点进行两两配对,以配对的两个点为基准,找另外两个点在不在我们的点集里面。
现在的问题就在于如何确定另外两个点在哪里,画一个草图以后我们可以看到已知两个点,确定一个正方形有两种可能,但是因为我们预先排了序,所以我们只需要考虑一种方向就可以了,利用简单的全等三角形就可以求出来两个点的坐标
#include <iostream>#include <cstdio>#include <memory.h>#include <algorithm>using namespace std;#define maxn 1050struct data{ int x,y;};data p[maxn]={0};bool cmp(const data &a,const data &b){ if(a.x==b.x) return a.y<b.y; return a.x<b.x;}int main(){ int n; while(scanf("%d",&n),n){ memset(p,0,sizeof(p)); for(int i=0;i<n;++i){ scanf("%d%d",&p[i].x,&p[i].y); } sort(p,p+n,cmp); int ans = 0; for(int i=0;i<n;++i){ for(int j=i+1;j<n;++j){ data tmp; tmp.x = p[i].x + p[i].y - p[j].y; tmp.y = p[i].y - p[i].x + p[j].x; if(!binary_search(p, p + n, tmp, cmp)) continue; tmp.x = p[j].x + p[i].y - p[j].y; tmp.y = p[j].y - p[i].x + p[j].x; if(!binary_search(p, p + n, tmp, cmp)) continue; ans ++; } } printf("%d\n",ans/2); } //system("pause"); return 0;}
0 0
- poj 2002 Squares
- poj 2002 Squares
- POJ 2002 Squares
- poj 2002 Squares
- poj 2002 Squares
- poj-2002 Squares
- POJ 2002 Squares
- POJ 2002 Squares
- BIT1033 POJ 2002 Squares
- POJ 2002 Squares
- POJ 2002 Squares
- POJ 2002 Squares Hash
- POJ 2002 Squares
- poj 2002 Squares
- POJ 2002 Squares
- POJ 2002 Squares
- poj-2002-Squares--二分
- poj 2002 Squares
- 数据库对象和约束
- 如何自动在Eclipse里对指定类或接口生成要覆盖的方法?
- 设置UILabel的行间距
- IOS TableViewCell分割线设置和隐藏多余cell
- leetcode -- Missing Number -- 位运算重点
- POJ 2002 Squares
- Java爬取百度图片
- MAC下Android的Eclipse开发环境的搭建
- OOP思想与Java实现
- 保存输入和读取文件【python】
- android EditText 设置密码明文 密文 显示方法
- Java API实现WebSocket客户端
- 如何查找安装的 Java 版本(而不在 Windows 或 Mac 中运行小应用程序)?
- ubuntu更新时"Not enough free disk space"