关键点:时间复杂度
1.暴力枚举方法:
- 暴力枚举方法会遍历二维空间中的每一个点,对于每一个点,检查它的四个直接邻居是否都是垃圾点,然后对于每一个满足条件的点,再检查它的四个对角邻居的垃圾点数量。这种方法的时间复杂度为 O ( N 2 ∗ M ) O(N^2 * M) O(N2∗M),其中 N 代表二维空间的大小,M 代表垃圾点的数量。这是因为你需要为每个可能的位置检查其周围的八个点是否为垃圾点。
2.优化思路:
- 本代码采取的策略不是遍历整个二维空间,而是直接遍历垃圾点列表。对于每个垃圾点,代码只检查与这个特定垃圾点相关的邻居(直接和对角线邻居)。这种方法的时间复杂度是 O ( M 2 ) O(M^2) O(M2),其中 M 代表垃圾点的数量。这是因为对于每个垃圾点,你都在检查与它相邻的点是否也是垃圾点,而不是检查整个区域中的每个点。
解题思路
1.数据结构定义
-
trashPoint 结构体:
- 它包含两个整数变量
x
和y
,分别代表垃圾点在二维空间中的横坐标和纵坐标。 - 重载的
==
运算符,使得可以直接比较两个trashPoint
是否具有相同的位置。
- 它包含两个整数变量
-
vector trashList:用于存储所有输入的垃圾点。
-
vector pointGrade:用于记录每个等级(0到4对角邻居)的潜在垃圾处理站位置的数量。
2.代码解释:
-
输入处理:
- 代码首先从标准输入读取一个整数
n
,表示垃圾点的数量。 - 然后,它循环读取每个垃圾点的坐标
- 代码首先从标准输入读取一个整数