数正方形---蓝桥杯练习

我的思路是用深度搜索,找到所有的四边形然后判断是否为正方形

题目描述

在一个 N×N 的点阵上,取其中 4 个点恰好组成一个正方形的 4 个顶点,一共有多少种不同的取法?

由于结果可能非常大,你只需要输出模 10^9 + 7 的余数。

如上图所示的正方形都是合法的。
加粗样式
输入描述
输入包含一个整数N (2≤N≤10^6)。

输出描述
输出一个整数代表答案。

输入输出样例

输入

	4

输出

	20

思路

用两层for循环确定一个点的x,y坐标,深度搜索找到所有四个点组成的四边形,然后判断是否为正方形,要注意的是四个点中相同的x坐标最多出现两次,y坐标也同理。设计两个字典记录次数可以减少不必要的计算的次数(若次数大于二,至少有三个点在一条直线上)

如何判断四个点是否连成正方形

得到的是四个点的坐标,但我们不知道顺序,所以两个点相连可能是边,也可能是对角线。
但是四个点就有12种排列组合,而且这十二种排列组合意义都是相同的,于是我们只要随机取两个点,恰好那两点是对角的情况。

if (A-B)**2+(a-b)**2==(A-D)**2+(a-d)**2==(B-C)**2+(b-c)**2==(C-D)**2+(c-d)**2:
         if (A-B)*(A-D)+(a-b)*(a-d)==0 and (C-B)*(C-D
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值