poj2002Squares(点集组成正方形数)
可以枚举两个点,因为是正方形两外两点可以由已知求出,据说可以根据三角形全等求出下列式子,数学渣不会证。。。
已知: (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)
然后就可以hash或者二分做了,这里只用hash做的
应该算是简单的hash解决冲突的应用,放一个邻接表里。
两点需正反枚举两次,才能保证两种位置的正方形都被枚举到。
最后的结果需要除4,因为重复枚举了。
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<vector>
#include<cmath>
#include<queue>
#include<set>
using namespace std;
#define N 1010
#define mod 99991
#define LL long long
#define INF 0xfffffff
const double eps = 1e-;
const double pi = acos(-1.0);
const double inf = ~0u>>;
struct point
{
int x,y;
point(int x=,int y=):x(x),y(y){}
}p[N],o[N];
int next[N],head[mod],t;
void insert(int i)
{
int key = (p[i].x*p[i].x+p[i].y*p[i].y)%mod;
next[t] = head[key];
o[t].x = p[i].x;
o[t].y = p[i].y;
head[key] = t++;
}
int find(point a)
{
int key = (a.x*a.x+a.y*a.y)%mod;
int i;
for(i = head[key] ; i!= - ; i = next[i])
{
if(o[i].x==a.x&&o[i].y == a.y) return ;
}
return ;
}
bool cmp(point a,point b)
{
if(a.x==b.x)
return a.y<b.y;
return a.x<b.x;
}
int main()
{
int n,i,j;
while(scanf("%d",&n)&&n)
{
memset(head,-,sizeof(head));
t = ;
for(i = ; i <= n; i++)
{
scanf("%d%d",&p[i].x,&p[i].y);
insert(i);
}
//sort(p+1,p+n+1,cmp);
int ans = ;
for(i = ; i <= n ;i++)
for(j = ; j <= n; j++)
{
if(i==j) continue;
point p1,p2;
p1.x = p[i].x+(p[i].y-p[j].y);
p1.y = p[i].y-(p[i].x-p[j].x);
p2.x = p[j].x+(p[i].y-p[j].y);
p2.y = p[j].y-(p[i].x-p[j].x);
if(!find(p1)) continue;
if(!find(p2)) continue;
ans++;
}
printf("%d\n",ans/);
}
return ;
poj2002Squares(点集组成正方形数)的更多相关文章
- [Bnuz OJ]1176 小秋与正方形
传送门 问题描述 某天,acm的小秋拿到了一张很大很大的纸.他现在打算把它撕成正方 形.但是他没有任何工具,没有尺子,所以他尝试一种有趣的方法切分矩形.假设这是一个a*b的矩形(a>b),那么小 ...
- 洛谷 P5206 - [WC2019]数树(集合反演+NTT)
洛谷题面传送门 神仙多项式+组合数学题,不过还是被我自己想出来了( 首先对于两棵树 \(E_1,E_2\) 而言,为它们填上 \(1\sim y\) 使其合法的方案数显然是 \(y\) 的 \(E_1 ...
- tc 146 2 RectangularGrid(数学推导)
SRM 146 2 500RectangularGrid Problem Statement Given the width and height of a rectangular grid, ret ...
- zjoi2016 day1【bzoj4455】【bzoj4456】
首先做了T2的旅行者,看到bz上面过的人数比较多.. 考试的时候完全没有想太多.一闪而过了分块思想,然后就没有然后了.. 大视野上面有题解,竟然是一个初中生写的..? 正解其实是“分治”,每次选择中轴 ...
- Codeforces Round #141 (Div. 2)
A. Is your horseshoe on the other hoof? 模拟题意. B. Two Tables 暴力枚举\(x,y\). C. Fractal Detector 显然,判断图形 ...
- POJ 2002 Squares 解题报告(哈希 开放寻址 & 链式)
经典好题. 题意是要我们找出所有的正方形.1000点,只有枚举咯. 如图,如果我们知道了正方形A,B的坐标,便可以推测出C,D两点的坐标.反之,遍历所有点作为A,B点,看C,D点是否存在.存在的话正方 ...
- 数学(容斥计数):LNOI 2016 方
Description 上帝说,不要圆,要方,于是便有了这道题.由于我们应该方,而且最好能够尽量方,所以上帝派我们来找正方形 上帝把我们派到了一个有N行M列的方格图上,图上一共有(N+1)×(M+1) ...
- The square chest
The square chest Sophia pressed the button in front of her, slamming her fist against it. The door r ...
- Tyvj P1813 [JSOI2008]海战训练
P1813 [JSOI2008]海战训练 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 为了准备高层峰会,元首命令武装部队必须处于高度戒备.警察将监视每一条 ...
随机推荐
- GCD 多线程 初探
GCD编程的核心就是dispatch队列,dispatch block的执行最终都会放进某个队列中去进行,它类似NSOperationQueue但更复杂也更强大,并且可以嵌套使用.所以说,结合bloc ...
- GHOST出错
error 15:file not found grub问题VFS:Cannot open root device "sda" or unknow-block 可能是磁盘驱动程序问 ...
- windows7 安装 memcached
下载 memcached 的 windows 稳定 memcached.exe 版本,然后解压到某个目录下面,这里放到了 D:\ApacheServer\memcached 找到 C:\Windows ...
- 上传文件时,Request报文头不同浏览器会产生不同的content-type
选择一个zip文件上传,用IE看的报文头是image/jpeg,用chrom看是application/octet-stream. 第一次遇到这个类型的content-type,百度了一下, octe ...
- 【转】MYSQL入门学习之一:基本操作
转载地址:http://www.2cto.com/database/201212/173868.html 1.登录数据库 www.2cto.com 命令:mysql -u usern ...
- MultiSelectComboBox(一)
1. MultiSelectComboBox.xaml <UserControl x:Class="MultiSelectComboBox.MultiSelectComboBox&qu ...
- linux socket高性能服务器处理框架
这个博客很多东西 http://blog.csdn.net/luozhonghua2014/article/details/37041765 思考一种高性能的服务器处理框架 1.首先需要一个内存池 ...
- Python网络爬虫Scrapy框架研究 以及 代理设置
地址:https://github.com/yidao620c/core-scrapy 例子:https://github.com/geekan/scrapy-examples 中文翻译文档: htt ...
- js的 image 属性 和一个预加载模块
创建一个Image对象:var a=new Image(); 定义Image对象的src: a.src=”xxx.gif”; 这样做就相当于给浏览器缓存了一张图片. 图像对象: 建立图像对 ...
- 2016 Al-Baath University Training Camp Contest-1 H
Description You've possibly heard about 'The Endless River'. However, if not, we are introducing it ...