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