POJ2002Squares
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的更多相关文章
- poj2002Squares(点集组成正方形数)
链接 可以枚举两个点,因为是正方形两外两点可以由已知求出,据说可以根据三角形全等求出下列式子,数学渣不会证... 已知: (x1,y1) (x2,y2) 则: x3=x1+(y1-y2) y ...
- Hash (poj2002-Squares & poj3349-Snowflake Snow Snowflakes)
//突然发现好弱,好多基础的算法竟然都不会,哈希这种经典的算法,我貌似基本没怎么做过相关的题0.0 POJ2002 题意:给n个点,问有多少组四个点能组成正方形. 题解:枚举两个点,通过公式算出另外两 ...
随机推荐
- 使用记事本+CSC编译程序
本次学习主要阐明.NET开发可以不使用VS,也能像Java一样使用命令窗口.但实际意义不大. 诸位看管不必太留意.(仅供留着给公司新人,树(tree)新(new)风(bee)用.) 1.新建一个文本文 ...
- 基础学习总结(五)---baseAdapter、ContentProvider
小写转大写 : ctrl+shift+F <ScrollView></ScrollView>滚动条显示视图 ListView与BaseAdapter: public class ...
- PHP类的自动载入机制
php的自动加载: 在php5以前,我们要用某个类或类的方法,那必须include或者require,之后才能使用,每次用一个类,都需要写一条include,麻烦 php作者想简单点,最好能引用一个类 ...
- php实现图片加密解密,支持加盐
一个简单的图片加解密函数 使用client跑,不要使用浏览器跑 qq845875470 ,技术交流 <?php /** * Created by hello. * User: qq 845875 ...
- 第六周 N题
Description As Harry Potter series is over, Harry has no job. Since he wants to make quick money, (h ...
- php中使用linux命令四大步骤
一.PHP中调用外部命令介绍在PHP中调用外部命令,可以用,1>调用专门函数.2>反引号.3>popen()函数打开进程,三种方法来实现: 方法一:用PHP提供的专门函数(四个):P ...
- Thinkphp模板中使用自定义函数的方法
注意:自定义函数要放在项目应用目录/common/common.php中. 这里是关键. 模板变量的函数调用格式:{$varname|function1|function2=arg1,arg2,### ...
- MVC学习系列——Model验证扩展
MVC中,实现了前端后端的验证. 前端验证.步骤: web.config这两个得开启: <add key="ClientValidationEnabled" value=&q ...
- ASP.NET 运行机制续(完结)
上一篇说到applicationInstance会执行一些列的事件.下面是我在msdn上找到有关asp.net程序生命周期相关的描述及图片 声明周期的起始 ASP.NET 应用程序的生命周期以浏览器向 ...
- Python实战(2)
在安装python第三方插件库的时候遇到了这个错误 遇到这种问题可以”转战“国内的第三方镜像,问题便可迎刃而解.例如豆瓣镜像——http://pypi.douban.com/simple/ 先安装ea ...