不知道是否满足所有测试用例要求,有问题还望各位及时指出,谢谢
题目描述
输入N个互不相同的二维整数坐标,求这N个坐标可以构成的正方形数量。[内积为零的的两个向量垂直]
输入描述
第一行输入为N,N代表坐标数量,N为正整数。N <= 100
之后的 K 行输入为坐标x y以空格分隔,x,y为整数,-10<=x, y<=10
输出描述
输出可以构成的正方形数量。
示例 1 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
3
1 3
2 4
3 1
输出
0 (3个点不足以构成正方形)
示例 2 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
4
0 0
1 2
3 1
2 -1
输出
1
已知:正方形的两个点 (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)
从另一位博主的文章中学到这一计算公式
原文链接:https://blog.youkuaiyun.com/qq_40507857/article/details/84205680通过上述的公式,只要枚举两个顶点,根据这两个顶点计算出要满足正方形需要的剩下两个顶点,然后判断该顶点是否在输入的列表中是否存在,如果都存在则方案数+1,最后所得方案数要除以4,因为一个正方形有四条边,每条边都会对这个正方形判断一次。
# Python
while True:
try:
N = int(input())
pos_list = []
for i in range(N):
pos_list.append(tuple(map(int, input().split())))
count = 0
if N < 4:
print(count)
else:
for i in range(len(pos_list) - 1):
for j in range(i + 1, len(pos_list)):
x1 = pos_list[i][0]
y1 = pos_list[i][1]
x2 = pos_list[j][0]
y2 = pos_list[j][1]
x3_1 = x1 - (y1 - y2)
y3_1 = y1 + (x1 - x2)
x4_1 = x2 - (y1 - y2)
y4_1 = y2 + (x1 - x2)
if (x3_1, y3_1) in pos_list and (x4_1, y4_1) in pos_list:
count += 1
x3_2 = x1 + (y1 - y2)
y3_2 = y1 - (x1 - x2)
x4_2 = x2 + (y1 - y2)
y4_2 = y2 - (x1 - x2)
if (x3_2, y3_2) in pos_list and (x4_2, y4_2) in pos_list:
count += 1
print(int(count/4))
except:
break
不知道是否满足所有测试用例要求,有问题还望各位及时指出,谢谢