#P1025. [CSP-S 2023] 结构体
[CSP-S 2023] 结构体
模拟一个具有内存对齐规则的类型系统。基本类型 、、、 的大小与对齐要求分别为 字节。
结构体成员按定义顺序排列。每个成员的起始地址是:不小于上一个成员结束位置,且满足自身对齐要求的最小地址。结构体的对齐要求为其所有成员对齐要求的最大值,最终大小也必须向上补齐到该对齐要求的倍数。
结构体定义本身不占内存,可以使用此前定义的类型。全局元素从地址 起顺序分配,元素起点同样需要满足对齐要求。
需要处理以下四类操作:
- 定义结构体类型,输出其大小与对齐要求。
- 定义全局元素,输出其起始地址。
- 使用形如 的访问路径访问已有元素或成员,输出其起始地址;允许访问结构体本身。
- 给出一个地址:若该字节属于某个基本类型元素,输出其完整访问路径;若位于对齐填充区或未分配区,输出 。
类型名与全局元素名互不重复;同一结构体内成员名互不重复。不同结构体的成员名可以相同,也可以与类型名或全局元素名相同。
输入格式
第一行一个整数 ,表示操作数。
操作 的格式为 ,随后给出 行,每行包含一个类型和一个成员名。操作 的格式为 ;操作 的格式为 ;操作 的格式为 。
输出格式
对每个操作输出一行对应结果。
样例 1
5
1 a 2
short aa
int ab
1 b 2
a ba
long bb
2 b x
3 x.ba.ab
4 10
8 4
16 8
0
4
x.bb
数据范围与原题特殊限制
对于全部数据,满足 ,,。
所有定义的结构体类型名、成员名称和定义的元素名称均由不超过 个字符的小写字母组成,且都不是 byte,short,int,long(即不与基本类型重名)。
所有定义的结构体类型名和元素名称互不相同,同一结构体内成员名称互不相同。但不同的结构体可能有相同的成员名称,某结构体内的成员名称也可能与定义的结构体或元素名称相同。
保证所有操作均符合题目所述的规范和要求,即结构体的定义不会包含不存在的类型、不会访问不存在的元素或成员等。
保证任意结构体大小及定义的元素占据的最高内存地址均不超过 。
| 测试点 | 特殊性质 |
|---|---|
| A、D | |
| A | |
| B、D | |
| B | |
| C、D | |
| C | |
| D | |
| 无 |
特殊性质 A:没有操作 ;
特殊性质 B:只有一个操作 ;
特殊性质 C:所有操作 中给出的成员类型均为基本类型;
特殊性质 D:基本类型只有 long。
来源与数据说明
原题页面。以上题意为重新整理的表述,规则、输入输出和约束与原题一致。本题使用独立生成的训练数据,原题测试点表仅说明原比赛范围与特殊性质,本包评分不复刻官方测试点分布。标准输入输出,不要求文件读写。