P8791 [蓝桥杯 2022 国 AC] 内存空间
题目描述
小蓝最近总喜欢计算自己的代码中定义的变量占用了多少内存空间。
为了简化问题,变量的类型只有以下三种:
`int`:整型变量,一个 int 型变量占用 $4$ Byte 的内存空间。
`long`:长整型变量,一个 long 型变量占用 $8$ Byte 的内存空间。
`String`:字符串变量,占用空间和字符串长度有关,设字符串长度为 $L$,则字符串占用 $L$ Byte 的内存空间,如果字符串长度为 $0$ 则占用 $0$ Byte 的内存空间。
定义变量的语句只有两种形式,第一种形式为:
```
type var1=value1,var2=value2...;
```
定义了若干个 type 类型变量 var1、var2、……,并且用 value1、value2……初始化。
多个变量之间用 `,` 分隔,语句以 `;` 结尾,type 可能是 `int`、`long` 或 `String`。例如 `int a=1,b=5,c=6;` 占用空间为 $12$ Byte;`long a=1,b=5;` 占用空间为 $16$ Byte;`String s1="",s2="hello",s3="world";` 占用空间为 $10$ Byte。
第二种形式为:
```
type[] arr1=new type[size1],arr2=new type[size2]…;
```
定义了若干 type 类型的一维数组变量 arr1、arr2……,且数组的大小为 size1、size2……,多个变量之间用 `,` 进行分隔,语句以 `;` 结尾,type 只可能是 `int` 或 `long`。例如 `int[] a1=new int[10]`;占用的内存空间为 $40$ Byte;`long[] a1=new long[10],a2=new long[10];` 占用的内存空间为 $160$ Byte。
已知小蓝有 $T$ 条定义变量的语句,请你帮他统计下一共占用了多少内存空间。结果的表示方式为:$\texttt{aGBbMBcKBdB}$,其中 $a$、$b$、$c$、$d$ 为统计的结果,$\texttt{GB}$、$\texttt{MB}$、$\texttt{KB}$、$\texttt{B}$ 为单位。优先用大的单位来表示,$1\texttt{GB}=1024\texttt{MB}$,$1\texttt{MB}=1024\texttt{KB}$,$1\texttt{KB}=1024\texttt{B}$,其中 `B` 表示 Byte。如果 $a$、$b$、$c$、$d$ 中的某几个数字为 $0$,那么不必输出这几个数字及其单位。题目保证一行中只有一句定义变量的语句,且每条语句都满足题干中描述的定义格式,所有的变量名都是合法的且均不重复。题目中的数据很规整,和上述给出的例子类似,除了类型后面有一个空格,以及定义数组时 `new` 后面的一个空格之外,不会出现多余的空
格。
输入格式
输入的第一行包含一个整数 $T$,表示有 $T$ 句变量定义的语句。
接下来 $T$ 行,每行包含一句变量定义语句。
输出格式
输出一行包含一个字符串,表示所有语句所占用空间的总大小。
说明/提示
**【样例说明】**
样例 1,占用的空间为 $131072 \times 8 = 1048576$ ,换算过后正好是 $1\texttt{MB}$,其它三个单位 $\texttt{GB}$、$\texttt{KB}$、$\texttt{B}$ 前面的数字都为 $0$,所以不用输出。
样例 2,占用的空间为 $4 \times 2 + 8 \times 2 + 10 + 8 \times 100000 \times 2$ B,换算后是 $1\texttt{MB}538\texttt{KB}546\texttt{B}$。
**【评测用例规模与约定】**
对于所有评测用例,$1 \leq T \leq 10$,每条变量定义语句的长度不会超过 $1000$。所有的变量名称长度不会超过 $10$,且都由小写字母和数字组成。对于整型变量,初始化的值均是在其表示范围内的十进制整数,初始化的值不会是变量。对于 String 类型的变量,初始化的内容长度不会超过 $50$,且内容仅包含小写字母和数字,初始化的值不会是变量。对于数组类型变量,数组的长度为一个整数,范围为:$[0, 2^{30}]$,数组的长度不会是变量。$T$ 条语句定义的变量所占的内存空间总大小大于 $0$ B 且小于 $1024$ GB。
蓝桥杯 2022 国赛 A 组 C 题(C 组 D 题)。