P16274 [蓝桥杯 2026 省 C] 二维码存储

题目描述

打印机吐出了一张二维码,小蓝正准备将其数据存入嵌入式设备的内存中。 这张二维码是一个 $n \times m$ 的矩阵,由 $n$ 行、$m$ 列个黑白相间的模块组成。 数据在内存中以“行优先”的方式紧挨着存储:先存第一行,再存第二行,以此类推。每个模块仅需 $1$ 个二进制位(bit)即可记录:$0$ 代表白色,$1$ 代表黑色。 然而,这台嵌入式设备的硬件限制非常严格: - 内存中每一行数据占用的空间大小,必须是 $32$ 的整数倍(单位:bit)。 因此,在写入内存时需要以行为单位进行 $32\ \text{bit}$ 对齐。具体地,二维码每一行包含 $m$ 个模块,对应 $m$ 个有效数据位: - 若 $m$ 不是 $32$ 的倍数,则在该行数据进行补位:末尾补若干个 $0$,使该行在内存中占用的位数变为不小于 $m$ 的 $32$ 的倍数; - 若 $m$ 恰好是 $32$ 的倍数,则不需要补位。 补上的 $0$ 仅作为本行的填充位,计入本行占用空间。下一行不能使用这些填充位。 现在,小蓝想知道,要想存下这张完整的二维码,他至少需要向系统申请多少个字节(Byte)的内存空间?(注:$1\ \text{Byte} = 8\ \text{bit}$)

输入格式

输入共一行,包含两个整数 $n$ 和 $m$,分别表示二维码的行数和每行的模块数。

输出格式

输出一个整数,表示存储该二维码所需的最少字节数。

说明/提示

### 【样例说明】 **样例 1**:每行有 $10$ 个模块。$10$ 不是 $32$ 的倍数,需要补 $22$ 个 $0$ 凑成 $32$ 位。两行共 $64$ 位,即 $8$ 字节。 **样例 2**:每行有 $40$ 个模块。$40$ 不是 $32$ 的倍数,最近的倍数是 $64$,需补 $24$ 个 $0$。两行共 $128$ 位,即 $16$ 字节。 ### 【评测用例规模与约定】 对于 $40\%$ 的评测用例,$1 \leq n, m \leq 1000$; 对于所有评测用例,$1 \leq n, m \leq 10^9$。