题解 | 螺旋矩阵用暴力模拟会超内存,要用数学方法直接计算

螺旋矩阵

https://www.nowcoder.com/practice/c23363730308436394ec4e4dae3ff84c

def get_spiral_value(n, m, row, col):
    # 计算目标位置在第几圈
    layer = min(row, n - 1 - row, col, m - 1 - col)

    # 计算外层圈的总元素数
    outer_elements = 0
    for l in range(layer):
        if l == 0:
            outer_elements += 2 * (n + m) - 4
        else:
            outer_elements += 2 * (n - 2 * l + m - 2 * l) - 4

    # 计算当前圈中目标位置的偏移量
    current_n, current_m = n - 2 * layer, m - 2 * layer
    current_row, current_col = row - layer, col - layer

    # 计算在当前圈中的位置
    if current_row == 0:  # 上边
        position = current_col + 1
    elif current_col == current_m - 1:  # 右边
        position = current_m + current_row
    elif current_row == current_n - 1:  # 下边
        position = current_m + current_n - 1 + (current_m - 1 - current_col)
    else:  # 左边
        position = (
            current_m + current_n - 1 + (current_m - 1) + (current_n - 1 - current_row)
        )

    return outer_elements + position


n, m, a, b = map(int, input().split())
print(get_spiral_value(n, m, a - 1, b - 1))

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务