题目 3363:

蓝桥杯2026年第十七届省赛真题-二维码存储

 时间限制: 1s 内存限制: 128MB

题目描述

打印机吐出了一张二维码,小蓝正准备将其数据存入嵌入式设备的内存中。这张二维码是一个 n × m 的矩阵,由 n 行、m 列个黑白相间的模块组成。

数据在内存中以 “行优先” 的方式紧挨着存储:先存第一行,再存第二行,以此类推。每个模块仅需 1 个二进制位(bit)即可记录:0 代表白色,1 代表黑色。

然而,这台嵌入式设备的硬件限制非常严格:

• 内存中每一行数据占用的空间大小,必须是 32 的整数倍(单位:bit)。因此,在写入内存时需要以行为单位进行 32 bit 对齐。具体地,二维码每一行包含 m 个模块,对应 m 个有效数据位:

• 若 m 不是 32 的倍数,则在该行数据进行补位:末尾补若干个 0,使该行在内存中占用的位数变为不小于 m 的 32 的倍数;

• 若 m 恰好是 32 的倍数,则不需要补位。

    补上的 0 仅作为本行的填充位,计入本行占用空间。下一行不能使用这些填充位。

    现在,小蓝想知道,要想存下这张完整的二维码,他至少需要向系统申请多少个字节(Byte)的内存空间?(注:1 Byte = 8 bit)

输入格式

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

输出格式

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

样例输入

2 10

样例输出

8

提示

【样例输入 2】

2 40

【样例输出 2】16

【样例说明】

样例 1:每行有 10 个模块。10 不是 32 的倍数,需要补 22 个 0 凑成 32位。两行共 64 位,即 8 字节。

样例 2:每行有 40 个模块。40 不是 32 的倍数,最近的倍数是 64,需补24 个 0。两行共 128 位,即 16 字节。

【评测用例规模与约定】对于 40% 的评测用例,1 ≤ n, m ≤ 1000;对于所有评测用例,1 ≤ n, m ≤ 109

标签