【华为机试】2023年真题B卷(python)-绘图机器-计算面积

2024-01-02 13:30:13

一、题目

题目描述:

绘图机器的绘图笔初始位置在原点(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
示例2:
输入输出示例仅供调试,后台判题数据一般不包含示例
输入
2 4
0 1
2 -2
输出
4

四、要求

时间限制:C/C++ 1秒,其他语言 2秒
空间限制:C/C++262144K,其他语言524288K

五、参考代码?

# -*- coding: utf-8 -*-
'''
@File    :   2023-B-绘图机器-计算面积.py
@Time    :   2023/12/29 22:10:27
@Author  :   mgc 
@Version :   1.0
@Desc    :   None
'''

# import os
# import re
# import sys
# import copy
# import math
# import queue
# import functools
# from queue import Queue
# from collections import Counter, defaultdict

def calculate_area(n, e, nums):
    offsets = [0] * e

    # 将指令中的偏移量保存到offsets列表中
    for x, offsetY in nums:
        offsets[x] = offsetY

    if e == 0:
        return 0
    else:
        dp = [0] * e
        ans = dp[0] = offsets[0]

        # 计算dp数组和ans
        for i in range(1, e):
            dp[i] = dp[i-1] + offsets[i]
            ans += abs(dp[i])

        return ans


# 读取输入
data = [int(x) for x in input().split(" ")]
n = data[0]
e = data[1]
nums = []
for i in range(n):
    nums.append([int(x) for x in input().split(" ")])

# 计算面积
result = calculate_area(n, e, nums)

# 输出结果
print(result)

文章来源:https://blog.csdn.net/u014481728/article/details/135299438
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。