小慕正在搭建一个由魔晶方块组成的蛇形陈列架,用来展示他的能量水晶。 每个魔晶方块是一个长方体模块,其底面尺寸固定,而高度由对应位置的能量值决定。 每个魔晶方块的尺寸规则如下: 长度固定为 1 个单位,宽度固定为 2 个单位,高度为对应位置的能量值。 若某位置的能量值为 0,则表示该位置没有方块。 --- 陈列架排列规则(俯视视角) 输入给定一个正整数 m,表示每一行最多可容纳的方块数量。 给定一个一维数组 energy,其中下标 i 对应一个方块,其二维坐标 (row, col) 的计算方式为: row = i / m 若 row 为偶数: col = i % m 若 row 为奇数: col = m - 1 - (i % m) 该排列方式形成“之字形 / 蛇形”结构。 若某个二维坐标未被数组 energy 覆盖(即不存在对应的下标),则该位置的高度视为 0。 --- 计算规则 仅当某个位置的能量值 h > 0 时,该方块才参与表面积计算。 一、顶部与底部面积 只要方块存在,就一定具有顶部和底部,其总面积为: `top_bottom = 2 * (1 * 2) = 4` 该部分与相邻方块无关。 --- 二、四个侧面的暴露面积 若相邻方向存在高度更高或相等的方块,则被遮挡的部分不计入暴露面积。 若该方向不存在相邻方块(陈列架边界),则相邻高度视为 0。 左侧(col - 1 方向): `left = 1 * max(0, h - left_height)` 右侧(col + 1 方向): `right = 1 * max(0, h - right_height)` 上侧(row - 1 方向): `up = 2 * max(0, h - up_height)` 下侧(row + 1 方向): `down = 2 * max(0, h - down_height)` --- 三、总暴露表面积 每一个方块的贡献为: `4 + left + right + up + down` 整个陈列架的总暴露表面积为所有方块贡献之和。
提示:带虚线的词点一下有通俗解释。
输入描述
第一行输入一个整数 m,表示每行最多的高塔数量。 第二行输入一个整数 k,表示魔晶高塔模块的数量。 第三行输入 k 个非负整数 energy[0] 到 energy[k-1],表示各位置的魔晶能量高度。 - ` 1 <= k <= m * m` - `energy[i] <= 1000`
输出描述
输出一个整数,表示整个魔晶高塔阵列的总魔法暴露表面积。
示例
示例 1
输入
2 2 1 2
输出
24
说明:输入中给定 m = 2,高度数组为 [1, 2]。 首先按照蛇形规则将一维数组映射到二维坐标: 下标 0: row = 0 / 2 = 0(偶数行), col = 0 % 2 = 0, 对应坐标 (0, 0),高度为 1。 下标 1: row = 0 / 2 = 0(偶数行), col = 1 % 2 = 1, 对应坐标 (0, 1),高度为 2。 数组未覆盖的位置(例如 row = 1 的所有列),高度均视为 0。 接下来计算各位置的表面积贡献。 对于坐标 (0, 0),高度 h = 1: 上下盖板面积为 4; 左侧无相邻位置,暴露面积为 1 × 1 = 1; 右侧相邻高度为 2,暴露面积为 1 × max(0, 1 - 2) = 0; 上侧无相邻位置,暴露面积为 2 × 1 = 2; 下侧无相邻位置,暴露面积为 2 × 1 = 2。 该位置表面积小计为 4 + 1 + 0 + 2 + 2 = 9。 对于坐标 (0, 1),高度 h = 2: 上下盖板面积为 4; 左侧相邻高度为 1,暴露面积为 1 × max(0, 2 - 1) = 1; 右侧无相邻位置,暴露面积为 1 × 2 = 2; 上侧无相邻位置,暴露面积为 2 × 2 = 4; 下侧无相邻位置,暴露面积为 2 × 2 = 4。 该位置表面积小计为 4 + 1 + 2 + 4 + 4 = 15。 将所有位置的贡献相加,得到总表面积为: 9 + 15 = 24 因此,输出结果为 24。
示例 2
输入
3 5 2 1 3 0 2
输出
56
时间限制 1000 ms · 内存限制 128 MB