思路
-
通过观察example可知:田地与所划定区域重叠的条件是田地的最小坐标点(左下坐标)或最大最标点(右上)位于所划定的区域内。
-
按照这个逻辑我们可以进一步推出:田地与所划定区域不存在重叠区域的条件是最小坐标点(左下)大于划定区域的最大坐标点(右上),或田地最大坐标点(右上)小于划定区域的最小坐标点(原点)。
-
重叠区域的右边界即为
a
和x2
取最小值,左边界为0
和x1
取最大值,重叠面积的横轴长度即为二者之差,纵轴长度显然可按照这个思想得出。 -
故我们在接收田地位置坐标时可以顺带直接判断这个田地位置是否与所划定区域重叠,如果不重叠,则直接抛弃这个坐标点,其不符合我们的求重叠面积的要求。
# 202303-1田地丈量
n, a, b = map(eval, input().split(' '))
area = 0
for i in range(n):
temp = list(map(eval, input().split(' ')))
# 判断矩阵位置最小坐标点是否大于划定区域,大于则无相交位置
if temp[0] >= a or temp[1] >= b:
continue
# 判断矩阵最大坐标点位置是否小于划定区域,小于则无相交位置
if temp[2] <= 0 or temp[3] <= 0:
continue
# 最大或最小坐标点位于划定坐标区域内,有重叠区域,可进行面积计算
area += ((min(temp[2], a) - max(temp[0], 0)) * (min(temp[3], b) - max(temp[1], 0)))
print(area)