计算面积/绘图机器

题目描述

绘图机器的绘图笔初始位置在原点 (0,0) 机器启动后按照以下规则来进行绘制直线.

  1. 尝试沿着横线坐标正向绘制直线直到给定的终点E
  2. 期间可以通过指令在纵坐标轴方向进行偏移, 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

说明:

draw1

示例2

输入:

2 4
0 1
2 -2

输出:

4

说明:

draw2

题解

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()