蓝桥杯油漆面积(暴力)
1. 问题描述:
X星球的一批考古机器人正在一片废墟上考古。该区域的地面坚硬如石、平整如镜。 管理人员为方便,建立了标准的直角坐标系。 经过各种测量,每个机器人都会报告一个或多个矩形区域,作为优先考古的区域。 矩形的表示格式为(x1,y1,x2,y2),代表矩形的两个对角点坐标。 为了醒目,总部要求对所有机器人选中的矩形区域涂黄色油漆。 小明并不需要当油漆工,只是他需要计算一下,一共要耗费多少油漆。 其实这也不难,只要算出所有矩形覆盖的区域一共有多大面积就可以了。 注意,各个矩形间可能重叠。本题的输入为若干矩形,要求输出其覆盖的总面积。
输入
第一行,一个整数n,表示有多少个矩形(1<=n<10000)
接下来的n行,每行有4个整数x1 y1 x2 y2,空格分开,表示矩形的两个对角顶点坐标。
(0<= x1,y1,x2,y2 <=10000)
输出
一行一个整数,表示矩形覆盖的总面积。
样例输入
3
1 5 10 10
3 1 20 20
2 7 15 17
样例输出
340
来源:http://oj.ecustacm.cn/problem.php?id=1324
2. 思路分析:
分析题目可以知道如果将所有矩形的面积求和然后减去他们相交的部分可能会有点麻烦,对于这种数据规模不是特别大的题目可以使用暴力枚举,每输入一个矩形那么就将当前矩形覆盖的区域在之前没有标记的前提下标记一下,并且计数即可,这是最简单而且一定不会出错的解法,适合于数据量小的情况。因为使用的是python语言所以可以使用字典来标记已经涂过油漆的位置,字典的键为元组类型,元组中存储二维坐标,值为bool类型,使用两层循环将当前矩形覆盖的区域对应的位置全部标记即可(反正对于数据量小而且使用其他方法比较难处理,容易出错或者是没有思路的时候暴力枚举是个不错的方法)不过对于python语言提交上去可能有点尴尬,要不就是运行超时要不就是时间超限
3. 代码如下:
import collections
if __name__ == '__main__':dic = collections.defaultdict(bool)n = int(input())res = 0for i in range(n):x1, y1, x2, y2 = map(int, input().split())if x1 > x2: x1, x2 = x2, x1if y1 > y2: y1, y2 = y2, y1for w in range(x1, x2):for h in range(y1, y2):if (w, h) not in dic:dic[(w, h)] += Trueres += 1print(res)
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
