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

题意 : 就是给你很多点的坐标,任取四个,看能组成多少个不同的正方形,相同的四个点,不同顺序构成的正方形视为同一正方形。

思路 : 就是一个简单的枚举,但是你要是四个点四个点的枚举因为数据量到1000,所以肯定会超时的,就两个点两个点枚举,再去判断另外两个点是否存在就可以了,百度了才知道有这样一个公式,知道两个点(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)

据说是通过三角形全等证出来的

不过最后的结果要除以4,因为你每个点都枚举到了,所以就重复的加了一个正方形4次

#include<cstdio>
#include<cstring>
#include<cstdio>
using namespace std ;
const int maxn = ;
bool vis[maxn<<][maxn<<];//这个要定义成bool类型的,定义成int类型的会超内存
int ch[maxn],sh[maxn] ;
int main()
{
int n;
while(scanf("%d",&n)&&n)
{
memset(vis,,sizeof(vis)) ;
int a,b ;
int cnt = ;
for(int i = ; i <= n ; i++)
{
scanf("%d %d",&a,&b) ;
ch[i] = a ;
sh[i] = b ;
vis[maxn+a][maxn+b] = ;//因为存在负坐标,而数组下标只能为正
}
int x1,x2,x3,x4,y1,y2,y3,y4 ;
for(int i = ; i <= n ; i++)
{
x1 = ch[i] ;
y1 = sh[i] ;
for(int j = ; j < i ; j++)
{
x2 = ch[j] ;
y2 = sh[j] ;
x3=x1+(y1-y2);
y3= y1-(x1-x2);
x4=x2+(y1-y2);
y4= y2-(x1-x2);
if(vis[x3+maxn][y3+maxn]&&vis[x4+maxn][y4+maxn])
cnt++ ;
x3=x1-(y1-y2);
y3= y1+(x1-x2);
x4=x2-(y1-y2);
y4= y2+(x1-x2);
if(vis[x3+maxn][y3+maxn]&&vis[x4+maxn][y4+maxn])
cnt++ ;
}
}
printf("%d\n",cnt>>) ;
}
return ;
}

POJ2002Squares的更多相关文章

  1. poj2002Squares(点集组成正方形数)

    链接 可以枚举两个点,因为是正方形两外两点可以由已知求出,据说可以根据三角形全等求出下列式子,数学渣不会证... 已知: (x1,y1)  (x2,y2) 则:   x3=x1+(y1-y2)   y ...

  2. Hash (poj2002-Squares & poj3349-Snowflake Snow Snowflakes)

    //突然发现好弱,好多基础的算法竟然都不会,哈希这种经典的算法,我貌似基本没怎么做过相关的题0.0 POJ2002 题意:给n个点,问有多少组四个点能组成正方形. 题解:枚举两个点,通过公式算出另外两 ...

随机推荐

  1. 内核中读取UTC时间

        记录这个知识点的原因是因为项目中需要保存充电日志,因此,趁着这个机会,深入了解一下Linux的时间系统. UTC:(Universal Time Coordinated) 协调世界时的缩写   ...

  2. 修改eclipse中tomcat的发布路径

    当我们在eclipse部署好tomcat的时候,默认这个项目是部署在eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\t ...

  3. ASP.NET MVC4学习笔记之总体概述

    断断续续使用ASP.NET MVC框架也有一年多了,也算积累了一些经验,唉,一直想写一些笔记好好总结一下,人太懒不想动笔,今天终于决定开始.希望自己能坚持下去. 这篇文章大体介绍ASP.NET MVC ...

  4. kibana去掉丑陋的basic验证框,用自定义验证代替。

    最近在改写kibana,碰到了验证登录的问题.问题是这样子的,nginx设置了basic认证,然后客户端访问kibana的时候总是会弹出登录框,输入用户名和密码,现在要改写这个登陆框,用bootstr ...

  5. 在Linux下写一个简单的驱动程序

    本文首先描述了一个可以实际测试运行的驱动实例,然后由此去讨论Linux下驱动模板的要素,以及Linux上应用程序到驱动的执行过程.相信这样由浅入深.由具体实例到抽象理论的描述更容易初学者入手Linux ...

  6. ios技术面试题

    1.Difference between shallow copy and deep copy? 浅复制 只拷贝地址 不拷贝地址指向的对象 深复制 拷贝地址 并且指向拷贝的新对象 2.What is ...

  7. ubuntu 14.04 安装 Quartus II 13.1 过程

    神奇的linux! 第一步去官网注册然后下载对应的linux版本,包括软件和设备文件两部分,软件也就是quartus II nios ide,modelsim-altera这些,设备就是具体alter ...

  8. 微软职位内部推荐-Software Development Engineer II

    微软近期Open的职位: Job Title:Software Development EngineerII Division: Server & Tools Business - Comme ...

  9. C# Windows - 菜单栏和工具栏

    除了MenuStrip控件之外,还有许多控件可用于填充菜单.3个常见的控件是ToolStripMenuItem,ToolStripDropDown,和ToolStripSeparator.这些控件表示 ...

  10. 转载 -- C# 中的委托和事件

    原文地址:http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx C# 中的委托和事件 引言 委 ...