RUST

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

题目背景

你说得对,但是《Rust》是由 Mozilla 自主研发的一款全新零开销抽象编程语言。语言发生在一个被称作「RAII」的资源管理世界,在这里,退出作用域的对象将被授予「drop」方法,回收资源之力。你将扮演一位名为「Ferris」的神秘角色在编码的旅行中邂逅形状各异、生命周期独特的变量们,和它们一起击败强大的编译错误,找回失散的内存安全——同时,逐步发掘「Servo」的真相。

题目描述

你被赋予了一个管理内存块的任务。你的目标是编写一个程序,模拟一段简化的内存管理逻辑,确保在程序执行期间没有发生“悬垂指针”或“重复释放”的情况。

具体来说,给定一个由 n 个内存块组成的数组,每个内存块都有唯一的编号。你需要根据一系列操作来分配和释放这些内存块:

  • 操作 "alloc x" 表示分配编号为 x 的内存块。
  • 操作 "free x" 表示释放编号为 x 的内存块。

释放过后的内存块视为未被分配的内存块。

要求确保:

  1. 不能释放未被分配的内存块
  2. 不能分配已被分配的内存块
  3. 所有内存块编号为 11nn

请实现一个程序,根据输入的操作序列,判断是否出现了非法操作。如果出现非法操作,请输出 Illegal operation,否则输出 All operations are safe

只有通过了所有测试点,你才能取得本题的分数。

输入格式

  • 第一行输入两个整数nm,分别表示内存块的数量和接下来操作的数量
  • 接下来输入m行,每行表示一个操作(alloc xfree 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 的解释

  1. alloc 1:分配编号为 1 的内存块,合法。
  2. free 1:释放编号为 1 的内存块,合法。
  3. free 1:再次释放编号为 1 的内存块,但编号 1 已经释放过,属于非法操作。
  4. 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