P14104 [ZJCPC 2017] Seven Segment Display
题目描述
七段数码管(Seven segment display),又称七段指示器,是一种用于显示十进制数字的电子显示设备,是比点阵显示更为简单的选择。七段数码管被广泛用于数字时钟、电子测量仪表、基础计算器及其他需要显示数字信息的电子设备中。
Edward 是 Marjar 大学的一名学生,本学期正在学习“逻辑与计算机设计基础”课程。他购买了一个八位的七段数码管元件,用于他的课程项目——制作一个十六进制计数器。
要在七段数码管上显示一个十六进制数字,需要消耗一定的电能。显示一个十六进制数所需的总能量,是其各位数字需要消耗的能量之和。Edward 在网上查到如下能耗表,用以描述每种数字的能量消耗:
$$
\begin{array}{|c|c|c|c|}
\hline
\text{数字} & \text{能量消耗} & \text{数字} & \text{能量消耗} \\
& \text{(单位/s)} & & \text{(单位/s)} \\
\hline
0 & 6 & 8 & 7 \\
\hline
1 & 2 & 9 & 6 \\
\hline
2 & 5 & A & 6 \\
\hline
3 & 5 & B & 5 \\
\hline
4 & 4 & C & 4 \\
\hline
5 & 5 & D & 5 \\
\hline
6 & 6 & E & 5 \\
\hline
7 & 3 & F & 4 \\
\hline
\end{array}
$$
:::align{center}

:::
例如,要在七段数码管上显示十六进制数“5A8BEF67”一秒钟,需要消耗 $5 + 6 + 7 + 5 + 5 + 4 + 6 + 3 = 41$ 单位的能量。
Edward 的十六进制计数器的工作方式如下:
- 计数器仅工作 $n$ 秒,$n$ 秒结束后停止显示。
- 第 $1$ 秒开始,计数器显示预先设定的 8 位十六进制数 $m$。
- 在第 $i$ 秒结束时($1 \le i < n$),显示的数字自增 $1$。如果自增后超过十六进制最大值“FFFFFFFF”,则重新置为 $0$ 继续显示。
现在给定 $n$ 和 $m$,Edward 想知道八位七段数码管在这期间总共消耗了多少能量。你能帮他解决这个问题吗?
输入格式
有多组测试数据。输入的第一行为整数 $T$($1 \le T \le 10^5$),表示测试用例的数目。对于每个测试用例:
本例的唯一一行包含整数 $n$($1 \le n \le 10^9$)和一个大写的八位十六进制数 $m$($00000000 \le m \le \text{FFFFFFFF}$),含义如上所述。
温馨提示:本题数据输入输出量较大,推荐使用更快的输入输出方式。例如在 C++ 中建议使用 scanf/printf 替代 cin/cout。
输出格式
对于每组测试用例,输出一个整数,表示八位七段数码管模块的总能量消耗。
说明/提示
对于第一个样例,计数器将依次显示 $5$ 个十六进制数(89ABCDEF, 89ABCDF0, 89ABCDF1, 89ABCDF2, 89ABCDF3),共 $5$ 秒。能量消耗为:
$$
\begin{matrix}
(7 + 6 + 6 + 5 + 4 + 5 + 4 + 6) & + \\
(7 + 6 + 6 + 5 + 4 + 5 + 4 + 2) & + \\
(7 + 6 + 6 + 5 + 4 + 5 + 4 + 5) & + \\
(7 + 6 + 6 + 5 + 4 + 5 + 4 + 5) & = & 208
\end{matrix}
$$
对于第二个样例,计数器将依次显示 $3$ 个十六进制数(FFFFFFFF, 00000000, 00000001),共 $3$ 秒。能量消耗为:
$$
\begin{matrix}
(4 + 4 + 4 + 4 + 4 + 4 + 4 + 4) & + \\
(6 + 6 + 6 + 6 + 6 + 6 + 6 + 6) & + \\
(6 + 6 + 6 + 6 + 6 + 6 + 6 + 2) & = & 124
\end{matrix}
$$
由 ChatGPT 5 翻译