计算面积/绘图机器
题目描述
绘图机器的绘图笔初始位置在原点 (0,0)
机器启动后按照以下规则来进行绘制直线.
- 尝试沿着横线坐标正向绘制直线直到给定的终点E
- 期间可以通过指令在纵坐标轴方向进行偏移, offsetY为正数表示正向偏移, 为负数表示负向偏移
给定的横坐标终点值E 以及若干条绘制指令, 请计算绘制的直线和横坐标轴以及 x=E 的直线组成的图形面积.
输入描述
- 首行为两个整数 N 和 E
- 表示有N条指令,机器运行的横坐标终点值E
- 接下来N行, 每行两个整数表示一条绘制指令x offsetY
- 用例保证横坐标x以递增排序的方式出现
- 且不会出现相同横坐标x
取值范围:
- 0 < N <= 10000
- 0 <= x <= E <= 20000
- -10000 <= offsetY <= 10000
输出描述
一个整数表示计算得到的面积, 用例保证结果范围在0到 4294967295 之内.
示例1
输入:
4 10
1 1
2 1
3 1
4 -2
输出:
12
说明:
示例2
输入:
2 4
0 1
2 -2
输出:
4
说明:
题解
Python
def main():
# 读取输入
# 遍历每个坐标点
# 计算相邻坐标点之间形成的矩形面积
# 然后计算所有面积之和, 就是结果
parts = input().split()
assert len(parts) == 2
# 移动的坐标点数
num_points = int(parts[0])
# 终点E所在的X坐标
end_x = int(parts[1])
points = []
last_y = 0
# 遍历所有的输入坐标, 并计算它们的绝对坐标
for i in range(num_points):
parts = input().split()
assert len(parts) == 2
x = int(parts[0])
offset_y = int(parts[1])
y = last_y + offset_y
points.append((x, y))
last_y = y
# 移动的总面积
total_areas = 0
# 出发点是原点
last_point = (0, 0)
# 将最后一个点也加入进来
end_point = (end_x, 0)
points.append(end_point)
# 遍历所有的点
for point in points:
# 机器人移动方式是: 先横向移动到 point.x, 再纵向移动到 point.y
# 矩形面积是 dx * dy
dx = abs(point[0] - last_point[0])
#dy = abs_int(point[1] - last_point[1])
dy = abs(last_point[1])
total_areas += dx * dy
last_point = point
print(total_areas)
if __name__ == "__main__":
main()