poj 2002

POJ2002 正方形的个数(二维点的哈希) 给定N个点,求出这些点一共可以构成多少个正方形。 若正方形为ABCD,A坐标为(x1, y1),B坐标为(x2, y2),则很容易可以推出C和D的坐标。对于特定的A和B坐标,C和D可以在线段AB的左边或者右边,即有两种情况。 因此只需要枚举点A和点B,然后计算出两种对应的C和D的坐标,判断是否存在即可。这样计算完之后得到的答案是正确答案的4倍,因为正方形的4条边都枚举了,所以答案要右移两位。 阅读详情

二分查找一个点是否存在,用set无法避免素数陷阱,无法解决负数取模问题,用map也无法解决。
只能hash或者二分

#include <iostream>
#include <cstdio>
#include <iomanip>
#include <string>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <set>
#include <vector>
#include <map>
#include <algorithm>
#include <cmath>
#include <stack>

#define INF 0x3f3f3f3f
#define LINF 0x3f3f3f3f3f3f3f3f
#define ll long long
#define ull unsigned long long
#define uint unsigned int
#define l(x) ((x)<<1)
#define r(x) ((x)<<1|1)
#define lowbit(x) ((x)&(-(x)))
#define abs(x) ((x)>=0?(x):(-(x)))
#define ms(a,b) memset(a,b,sizeof(a))
#define NSYNC std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);

using namespace std;

struct node {
	int x, y;
	bool operator < (const node &p) const {
		if (x == p.x) return y < p.y;
		return x < p.x;
	}
	bool operator == (const node &p) const {
		return x == p.x && y == p.y;
	}
};

node demo[1111];

bool check(const node &target, int len) {
	int l = 0, r = len, mid;
	while (l <= r) {
		mid = (l + r) >> 1;
		if (target == demo[mid]) return true;
		else if (target < demo[mid]) r = mid - 1;
		else l = mid + 1;
	}
	return false;
}

int main() {
	int n, ans;
	while (scanf("%d", &n) ,n) {
		for (int i = 0; i < n; i++) 
			scanf("%d%d", &demo[i].x, &demo[i].y);
		sort(demo, demo + n);
		ans = 0;
		for (int i = 0; i < n; i++) {
			for (int j = i + 1; j < n; j++) {
				node tmp1, tmp2;
				tmp1.x = demo[i].x + demo[i].y - demo[j].y;
				tmp1.y = demo[i].y - demo[i].x + demo[j].x;
				tmp2.x = demo[j].x + demo[i].y - demo[j].y;
				tmp2.y = demo[j].y - demo[i].x + demo[j].x;
				if (check(tmp1, n) && check(tmp2, n)) ans++;
			}
		}
		printf("%d\n", ans >> 1);
	}
	return 0;
}
POJ - 2002:Squares POJ - 2002:Squares 来源: 标签: 参考资料: 相似题目: 题目 A square is a 4-sided polygon whose sides have equal length and adjacent sides form 90-degree angles. It is also a polygon such that ... 阅读详情

相关推荐

POJ2002-Squares

北大POJ2002-Squares 解题报告+AC代码

POJ 2002 Squares 数学 + 必须hash

http://poj.org/problem?id=2002 只能说hash比二分快很多。随便一个hash函数都可以完爆二分。 判断是否存在正方形思路如下: 1、枚举任意两个点,作为正方形的一条边,那么,整个正方形就确定了,有两个方向。 因为, 设枚举的坐标为(x1, y1) & (x2, y2),所求的坐标是和x1,y1这个点相连,那么有方程如下。 1、垂直,向量积是0 2...

weixin_30466421的博客 136

关于爱思唯尔官方Latex模版参考文献不是按照引用顺序编号,乱序问题

接下来使用工具打开cas-model2-names.bst文件,全词匹配搜索。其他期刊的模版也是一样的操作,把规定序号的规则的。爱思唯尔给的Latex模版大概文件结构如此。发现是按照第一作者的姓氏的大写字母排序。命令行给注释掉,小写的sort可别注释。

weixin_42748439的博客 5114

POJ 2002 快速查找

这是一道几何+快速查找的题目。 根据扩展方向的不同,主要有两种坐标的形式。我们只需要选择想一个方向的扩展,因为我们需要枚举所有的节点。但是这要做还是会有重复的,根据AB求CD坐标和根据AD求BC坐标,其实这两种确定的是一个正方形,所以最后的结果需要除以2。     另,枚举两个点,求得另外两个点,判断求出的这两个点是否在给定的点集中。我使用的是二分查找策略,首先需要对坐标先按照x排序,

陈氏春秋 471

affymatrix探针转换 | GPL5175探针对应的基因转换

一般情况下,有一些比较成熟的对应平台的注释数据集的R包。但是这个注释平台,我在Bioconductor上找了一圈都没有找到。只能通过最原始也最可靠的方法,从GEO数据集上去下载这部分的注释文件。以下展示全过程。 我要检查的数据平台是:GPL5157。 数据集的注释集链接为:https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GPL5175 这个注释数据集比较难弄的地方在于,它的基因集注释的不太好。没有比较直接的可供提取的genesample的信息;在ge.

weixin_40640700的博客 7125

fpga在线升级 linux_仅5000行Verilog代码、可在FPGA上跑轻量级Linux系统的RISC-V内核

本文发布于www.hackster.io,由东京理工大学的计算机学院开发,专用于教学与加速用(苏老师也一直认为这是RISC-V当前的主要方向)。目前市场上开源的RISC-V内核已经很多,但很少有公开的RISC-V计算系统是非常轻型且能跑Linux系统的。这一款RISC-V内核就可以运行在FPGA上,用Verilog编写的,需要很少硬件的资源就能跑起来,所以可以运行在一个低成本的FPGA上。来看一下...

weixin_34083807的博客 1867

poj_2002 哈希

题意:给定一堆点,判断能构成多少个正方形 枚举前两个点,根据前两个点推算出后两个点,看后两个点在不在表中,若在,ans++,记得最后ans除以4,多算了4倍。 code: #include #include using namespace std; const int HASH_BASE = 1007; int n; int map[1000][2]; int ha

在路上的学习者 564

第八章 GPU Scheduler 分析:8.3 drm_sched_entity — 调度实体

本文介绍了DRM GPU调度器中的drm_sched_entity结构,它作为用户提交命令进入调度器的提交通道,解决了归属、排序和公平性问题。文章首先分析了命令提交的归属需求,然后详细阐述了entity的核心模型,包括其职责、进程映射关系和核心字段。接着说明了用户态提交进入内核后的关键节点路径,以及entity内部的FIFO语义和激活机制。entity通过组织同一context的命令提交包为FIFO队列,使调度器能够在多个entity之间进行优先级和公平性调度,同时保证同一提交通道的顺序执行。

图形/计算GPU的驱动与虚拟化技术分享园地 658

POJ 2002 Squares

题目链接:https://vjudge.net/problem/POJ-2002 题目大意   多组数据,每组给定 n 个不同的点,问从这 n 个点中选 4 个,使之能连成正方形,有多少种不同的选法? 分析   思路是枚举 2 个点,然后计算出可能的另外两个点,看它们存不存在。   最优解应该是用哈希表(O(n2))做,不过POJ万年不更新,都不能用 unordered_map...

weixin_30646315的博客 139

白话机器学习算法理论+实战番外篇之Xgboost

1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,在这简单的先捋一捋, 常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支持向量机,集成算法Adaboost等 无监督算法:聚类,降维,关联规则, PageRank等 我前面已经尝试用最白话的语言完成了一个白话机器学习算法理论+实战系列,这个系列已经基本包含了上面这些算...

Miracle8070 1万+

CNN+LSTM+Attention+DNN模型实战:pytorch搭建CNN+LSTM+Attention+DNN行车速度预测

CNN+LSTM+Attention+DNN模型实战:pytorch搭建CNN+LSTM+Attention+DNN行车速度预测

6045

POJ - 2002(静态哈希链表找正方形)

POJ - 2002(静态哈希链表找正方形) 第一次做OJ,卡了好久, 稍微总结下. 原理 注意如果正方形有两个点是整数, 余下的两个点一定是整数. 计算公式如下: 已知:(x1,y1),(x2,y2)(x1,y1) ,(x2,y2) 则: x3=x1+(y1−y2)y3=y1−(x1−x2)x3=x1+(y1-y2) \quad y3= y1-(x1-x2) x4=x2+(

leonhe27的博客 702

搬运机器人系列编程:KUKA KR QUANTEC_(2).KUKA KRL语言编程基础

定义一个函数END!调用函数PRINT "结果: ", result!定义一个过程PRINT msgEND!调用过程printMessage("欢迎使用 KUKA 机器人")!定义搬运零件的起始位置和目标位置!定义焊接路径的各个点!定义喷涂路径的各个点KUKA Robot Language (KRL) 是一种专门为工业机器人设计的编程语言,具有结构化编程、丰富的库函数、实时性以及集成性等特点。

zhubeibei168的博客 1248

[POJ2002]Squares【平面几何】

[POJ2002]Squares 题目大意 每组数据给你一个平面,平面上有N个点,选取其中4个点使之组成一个正方形(不重复,不一定平行于x,y轴),问你有几种方法? 解题报告 我们知道如果确定三个点,就能确定一个正方形。确定两个点就能确定两个正方形,且这两个正方形对称,对称轴是过两个点的直线。那么我们就枚举两个点,剩下两个点就能推出来,然后用二分...

aiweiluan5095的博客 184

Ubuntu零基础入门到精通【1.1讲】:什么是 Ubuntu?一文带你彻底搞懂!

🏆 本文收录于 《滚雪球学 Ubuntu》 专栏。 本专栏面向有一定计算机基础,但尚未系统学习 Linux / Ubuntu 的读者,采用“滚雪球式学习法”:先装好、再会用、再理解、再优化、再实战,带你从第一次进入 Ubuntu 桌面 / 终端开始,逐步掌握 Ubuntu 的日常使用、命令操作、软件安装、系统配置、开发环境搭建与服务器部署能力。

**My Coding Family** 5943

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

poj 2002 Squares,hash

poj 2002 Squares 给出n个点,问能组成多少个正方形? 题解: 先把每个点hash 然后枚举两点(即枚举正方形的一条边),然后通过三角形全等,可以推出正方形的另外两点,在hash表里查找这两点看是存在,存在则 Cnt +1。 最后 answer = Cnt/4 //因为同一正方形都统计了4次。 #include #include #in

天亮说晚安 1717

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

POJ2002Squares

http://poj.org/problem?id=2002 题意 : 就是给你很多点的坐标,任取四个,看能组成多少个不同的正方形,相同的四个点,不同顺序构成的正方形视为同一正方形。 思路 : 就是一个简单的枚举,但是你要是四个点四个点的枚举因为数据量到1000,所以肯定会超时的,就两个点两个点枚举,再去判断另外两个点是否存在就可以了,百度了才知道有这样一个公式,知道两个点(x1,y1)(x2...

weixin_30433075的博客 142

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

二分 poj2002 Squares

很有意义的一道二分题 题意:给出点,问有多少个正方形 因为n 很容易就想到枚举正方形的两个点,那么可以通过这两个点可以得到对应的另外两个点,那么如何验证这两个点是否存在呢 当然会想到二分。先将坐标读入后排序好,然后用二分查询是否存在就可以了 难点:正方形并不一定是平行坐标轴的,可能是斜的,所以如何用两个已知点求得另外两个点呢? 这里有个公式可以用来变换 d

qwb的博客 1690

POJ - 2002 - Squares (hash算法)

题目:poj-2002 题意:给一些点的坐标,问最多可以构成多少个正方形。 直接四个点四个点地枚举肯定超时的,不可取。 普遍的做法是:先枚举两个点,通过数学公式得到另外2个点,使得这四个点能够成正方形。然后检查散点集中是否存在计算出来的那两个点,若存在,说明有一个正方形。 但这种做法会使同一个正方形按照不同的顺序被枚举了四次,因此最后的结果要除以4. 题解: 已知: (x1,y1) ...

Rotepad的博客 446

(POJ - 2002)Squares

(POJ - 2002)Squares A square is a 4-sided polygon whose sides have equal length and adjacent sides form 90-degree angles. It is also a polygon such that rotating about its centre by 90 degrees gives the same po

The wind of freedom blows 308

POJ 2002 Squares 哈希

题目链接:http://poj.org/problem?id=2002 1 #include <stdio.h> 2 #include <string.h> 3 4 const int prime = 999983; 5 6 struct Hash_table 7 { 8 int x, y; 9 struct...

weixin_30596735的博客 68

POJ2002 Squares(二维点哈希)

POJ2002 Squares(二维点哈希)

追梦赤子心 1094

POJ 2002 统计正方形 HASH

题目链接:http://poj.org/problem?id=2002 题意:给定n个点,问有多少种方法可以组成正方形。 思路:我们可以根据两个点求出对应正方形[有2个一个在两点左边,一个在两点右边]另外两个点的左边。例如 已知:(x1,y1) (x2,y2)则x3=x1+(y1-y2) y3= y1-(x1-x2) x4=x2+(y1-y2) y4= y2-(x1-x2)或...

weixin_33736048的博客 103
上一篇: poj 2001(字典树)
下一篇: poj 2010
FawkesLi
博客等级 码龄8年 21粉丝 170原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值