POJ 2002 hash 题目

本文介绍了一种通过坐标计算判断多个点能否构成正方形的算法,并提供了具体的C++代码实现,利用哈希表来提高查找效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Squares--POJ-2002

 

Q :给出 n 不同的点(以坐标形式给出),判断其可以构成多少个正方形?

  • 思路如下:
  •      ① .稍有智商的人都会数数,所以就是把每种情况都进行判断,如果你要是准备消磨时间的话,你就写吧!
  •      ② .很明显,①的做法对这道题来说不管用,因为会超时,由于考虑到了hash表,那么怎么去实现它的查找
  •          功能呢?......    
  • 我的思路:
  •      如果给出正方形的一个边,即得知其两个点,则可以算出另外两个点的坐标,然后再hash表中查看这两个
  •      点是否在表内。 所以对所有点进行两两遍历计算查找,如果对于一个构成的正方形,对其进行了四次遍历,
  •      所以结构要 除以 4;
  •      ③ .点的计算 给出 点(a,b),和(c,d);设计算点为 两种结果:第一种 点(a+b-d,b+c-a) 和
  •          点(c+b-d,d+c-a) 。第二种   点( a-(b-d),b-(c-a) ) 和 点( c-(b-d),d-(c-a) );
  •      ④.考虑得到可对③的那种情况做些修改然后只考虑一种情况,然后得到代码如下:
  •  
  •  说代码了:时间为 500ms
  •  
  •  这个代码是在下目前能力的极限,不过有些牛人太厉害了,100ms内,对以上代码如果有什么可以优化的请各位指点指点...

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值