华为OD机考双机位C卷 - 构成正方形的数量 (Java & Python & JS & GO & C++ & C)

构成正方形的数量

2026华为OD机试双机位C卷 - 华为OD上机考试双机位C卷

华为OD机试双机位C卷真题目录点击查看: 【全网首发】2026华为OD机位C卷 机考真题题库含考点说明以及在线OJ(OD上机考试双机位C卷)

题目描述

输入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

说明

内积的定义

内积(DotProduct)是向量代数中的一个重要概念。给定两个向量 $\mathbf{a} = (a_1, a_2)$ 和 $\mathbf{b} = (b_1, b_2)$ ,它们的内积定义为:

$$
\mathbf{a} \cdot \mathbf{b} = a_1 \times b_1 + a_2 \times b_2
$$

如果两个向量的内积为零,即 $\mathbf{a} \cdot \mathbf{b} = 0$ ,那么这两个向量互相垂直(即成90度角)。

解题思路

  1. 遍历所有点对,寻找可能的正方形

    • 对于每一对点 $(A, B)$ ,我们假设这两个点为正方形的对角线的两个端点。

    • 通过计算向量 $→\overrightarrow{AB}$ 的垂直向量,可以找到另外两个点的坐标。

    • 检查这两个点是否都在集合中,如果在,则构成一个正方形。

  2. 避免重复计算

    • 在统计正方形时,每个正方形会被计算四次(每个顶点都可能作为起始点),所以最终的正方形数量应该除以4。
posted @ 2026-03-15 12:23  华为od算法大师  阅读(1)  评论(0)    收藏  举报