#P17401. [ICPC 2018 Shenyang R] How Much Memory Your Code Is Using?
[ICPC 2018 Shenyang R] How Much Memory Your Code Is Using?
题目描述
在 C++ 语言中,变量的值以零和一的形式存储在计算机内存的某个位置。我们的程序不需要知道变量存储的确切位置,因为可以通过变量名直接引用它。
程序需要了解的是存储在每个变量中的数据类型。存储一个简单的整数与存储一个字母或一个大的浮点数并不相同。尽管它们都用零和一表示,但它们的解释方式不同,而且在很多情况下,它们占用的内存量也不相同。
基本数据类型 由语言直接实现,代表了大多数系统原生支持的基本存储单元。它们主要可以分为四类。
- 字符类型:可以表示单个字符,例如
'A'或'$'。最基本的类型是char,它是一个 字节的字符。 - 整数类型:可以存储一个整数值,例如 或 。它们有多种大小。最基本的是
int,它是一个 字节的整数。long long是一种更大的整数类型,占用的内存是int的两倍。在某些新系统中可能会出现一种更宽的整数类型__int128,它是一个 字节的整数,很少使用。 - 浮点类型:可以表示实数值,例如 或 ,根据使用的三种浮点类型的不同,精度也不同。
float、double和long double分别对应于int、long long和__int128,其中前者占用的内存量与后者分别相同。 - 布尔类型:在 C++ 中称为
bool的布尔类型,只能表示两种状态之一,true或false。它是一个 字节的类型。
现在你有一段 C++ 代码,其中有 行申请了若干变量和数组。此外,我已经检查过,因此可以保证这段代码中的所有变量和数组都是全局的,不存在任何冲突。
作为新手,你代码中的每一行只能申请一个变量或一个数组;所有这些变量和数组的类型都如上文所述;任何未提及的其他类型都不能出现在代码中。你的任务是计算这段代码总共使用的内存量。将答案以 Kibibyte( Kibibyte 等于 字节)为单位输出,并向上取整到最接近的整数。
输入格式
输入包含多个测试用例,第一行包含一个正整数 表示测试用例的数量,最多为 。
对于每个测试用例,第一行包含一个正整数 (最多为 ),表示代码中申请(即分配内存)变量和数组的总行数。接下来的 行,每行可能按如下形式声明一个变量
type variable name;
或者按如下形式声明一个新数组
type array name[array size];
其中 type 必须是上述类型名称之一。所有变量名和数组名都是仅包含小写字母的不同字符串,长度最多为 ,所有数组大小都是最多为 的正整数。除了某些类型名称中间或之后的空格,输入中不允许有多余的空格。换句话说,我们保证输入中不会出现连续的空格。
输出格式
对于每个测试用例,输出一行 "Case #x: y"(不含引号),其中 是测试用例编号(从 开始), 表示总共分配的内存量的 Kibibyte 数,并向上取整到最接近的整数。
2
8
bool a;
char b;
int c;
long long d;
__int128 e;
float f;
double g;
long double h;
1
int a[1000];
Case #1: 1
Case #2: 4
提示
在第二个样例中,内存用量为 字节,应向上取整为 Kibibyte。
翻译由 DeepSeek V4 Pro 完成