poj 2002 Squares (哈希+正方形已知相邻两点求另外两点的坐标)

博客讲述了如何通过哈希技术优化算法,解决寻找给定坐标能组成多少个正方形的问题。初始暴力解法时间复杂度过高,优化后枚举两条边,并利用正方形性质推导其他边坐标,通过哈希判断是否存在,最后答案为计数除以4。
摘要由CSDN通过智能技术生成

题意: 给出n个坐标 , 问能组成多少个正方形

解法:  暴力解法=>直接枚举4个点 =》时间复杂度 O(n^4) => (1000)^4 =>10^12显然会T

          利用正方形的性质, 枚举两个点作为满足正方形条件的一条边AB,,

         即可推导出AB上方满足条件的边CD的坐标(C的坐标和D的坐标), 和 AB下方满足条件的 边C‘’D‘’的坐标(C‘’的坐标和D‘’的坐标);

       只要C和D(C''和D'')同时存在在给定的n个坐标中,那么这个正方形就是存在的 =>  sum++;

      由于, 每次枚举一条边, 那么, 一个正方形的四条边都会被枚举一次, 也就是说每个满足条件的正方形都被计算了4次, 所有得出的答案 = sum/4

Code:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn = 1e4+50;
int getHa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值