RUST
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
题目背景
你说得对,但是《Rust》是由 Mozilla 自主研发的一款全新零开销抽象编程语言。语言发生在一个被称作「RAII」的资源管理世界,在这里,退出作用域的对象将被授予「drop」方法,回收资源之力。你将扮演一位名为「Ferris」的神秘角色在编码的旅行中邂逅形状各异、生命周期独特的变量们,和它们一起击败强大的编译错误,找回失散的内存安全——同时,逐步发掘「Servo」的真相。
题目描述
你被赋予了一个管理内存块的任务。你的目标是编写一个程序,模拟一段简化的内存管理逻辑,确保在程序执行期间没有发生“悬垂指针”或“重复释放”的情况。
具体来说,给定一个由 n 个内存块组成的数组,每个内存块都有唯一的编号。你需要根据一系列操作来分配和释放这些内存块:
- 操作
"alloc x"表示分配编号为x的内存块。 - 操作
"free x"表示释放编号为x的内存块。
释放过后的内存块视为未被分配的内存块。
要求确保:
- 不能释放未被分配的内存块
- 不能分配已被分配的内存块
- 所有内存块编号为 到
请实现一个程序,根据输入的操作序列,判断是否出现了非法操作。如果出现非法操作,请输出 Illegal operation,否则输出 All operations are safe。
只有通过了所有测试点,你才能取得本题的分数。
输入格式
- 第一行输入两个整数
n和m,分别表示内存块的数量和接下来操作的数量 - 接下来输入
m行,每行表示一个操作(alloc x或free x)。
输出格式
- 如果所有操作都合法,输出
All operations are safe。 - 如果有任何非法操作,输出
Illegal operation。
样例 #1
样例输入 #1
5 4
alloc 1
alloc 2
free 1
free 2
样例输出 #1
All operations are safe
样例 #2
样例输入 #2
3 4
alloc 1
free 1
free 1
alloc 5
样例输出 #2
Illegal operation
样例 #3
样例输入 #3
4 3
free 2
alloc 3
alloc 3
样例输出 #3
Illegal operation
提示
- 1 ≤ n ≤ 1000
- 每个操作的合法编号范围为 1 到 n。
对于样例 #2 的解释
alloc 1:分配编号为 1 的内存块,合法。free 1:释放编号为 1 的内存块,合法。free 1:再次释放编号为 1 的内存块,但编号 1 已经释放过,属于非法操作。alloc 5:请求分配编号为 5 的内存块,但给定的编号范围是 1 到 3,因此编号 5 超出范围,属于非法操作。
由于在第 3 和第 4 步都出现了非法操作,程序应输出 Illegal operation。
2024 NUAAXCPC Freshman Contest
- 状态
- 已结束
- 规则
- XCPC
- 题目
- 13
- 开始于
- 2024-11-23 13:00
- 结束于
- 2024-11-23 17:00
- 持续时间
- 4 小时
- 主持人
- 参赛人数
- 123