1. Job Roadmap
  2. Home
  3. Problem Set
  4. codenotelist
  5. Forum
  6. course
  7. Shore Share Sessions
  8. Record
  1. Login
  2. Sign Up
  3. Language
    1. English
    2. 한국어
    3. 简体中文
    4. 正體中文
    ZhContent TextSol AI分析

思路概述

把内存看作长度为 n 的数组,堆指针 hp 表示下一个要写入的堆位置(从 0 向右生长),栈指针 sp 表示下一个要写入的栈位置(从 n-1 向左生长):

  • 初始:hp = 0,sp = n-1,内存为给定初值。
  • 入堆(opt=0,给定 x):若 hp > sp ⇒ 无可用空间,Memory allocation failure;否则写 a[hp]=x,hp++。
  • 出堆(opt=1):若 hp == 0 ⇒ 堆空,Invalid heap address;否则 hp--(不清空内存)。
  • 入栈(opt=2,给定 x):若 hp > sp ⇒ 无可用空间,Memory allocation failure;否则写 a[sp]=x,sp--。
  • 出栈(opt=3):若 sp == n-1 ⇒ 栈空,Invalid stack address;否则 sp++(不清空内存)。

P3548.第3题-系统崩溃原因

    1000ms Tried: 64 Accepted: 15 Difficulty: 5 所属公司 : 得物
    算法与标签>模拟

题目内容

众所周知,计算机内存中有堆和栈,堆从低地址向高地址生长,栈从高地址向低地址生长,如下图所示:

image

小A的电脑的内存可以视作一个一维数组,地址从 000 到 n−1n-1n−1 编号,最开始堆指针指向 000 号位置,栈指针指向 n−1n-1n−1 号位置,接下来小A 将进行 mmm 次操作,以如下形式给出:

  • 0 x0 \ x0 x:将一个值为 xxx 的数放入堆

  • 111:将堆顶元素弹出

  • 2 x2 \ x2 x:将一个值为x的数放入栈

  • 333:将栈顶元素弹出

要保证计算机正常运行,则当元素入堆时,需要判断内存是否有剩,即存放的位置既不能超出内存范围,也不能更覆盖栈中的内容。当元素出堆时,需要判断堆中是否还有元素,同时只移动堆指针而不需将原堆顶存储的值清空。元素入栈出栈的情况也类似,入栈时要求内存有剩,出栈时要求栈不为空且不覆盖原本栈顶内存。如果不满足条件,那么小A的电脑将立即崩溃!

现在给出内存中的原始内容及小A 进行的 mmm 次操作,小AAA想要知道,他的这些操作是否会使电脑崩溃?若在元素出堆时系统崩溃,则输出 "invalidinvalidinvalid heapheapheap addressaddressaddress”(不包括引号,后同);若在元表出栈时系统崩溃,则输出 "invalidinvalidinvalid stackstackstack addressaddressaddress” ;若元素入堆或入栈时系统崩溃,则输出"MemoryMemoryMemory allocationallocationallocation faiurefaiurefaiure ” ;若所有操作都没有导致系统崩溃则输出“ DoneDoneDone "。同时小 A 还希望得到系统崩溃前一瞬间或所有操作正常结束后内存中的内容;以方便他恢复工作进度或进行下一步工作。

输入描述

第一行两个正整数 n,m(1≤n,m≤400)n,m(1≤n,m≤400)n,m(1≤n,m≤400) ,表示内存空间的大小和操作次数。

第二行 nnn 个 323232 位无符号整数 aia_iai​ ,表示内存第 iii 个位置初始存放的值。

接下来 mmm 行,每行先读入 “0,1,2,30,1,2,30,1,2,3” 中的一个整数 optoptopt ,表示操作种类,当 optoptopt 为偶数时再读入一个 323232 位无符号整数 xxx ,表示入堆或入栈的元素。

输出描述

第一行输出一个字符串,表示系统崩溃原因或正常完成所有操作。

第二行 nnn 个整数,表示系统崩溃前或正常完成操作后的内存内容。

样例1

输入

3 5
1 2 3
2 4
0 5
1
1
0 6

输出

Invalid heap address
5 2 4

说明

样例解释第一次操作将 444 入栈,此时内存为 {1,2,41,2,41,2,4},堆大小为 000 ,栈大小为 111 。

第二次操作将 555 入堆,此时内存为 {5,2,45,2,45,2,4},堆大小为 111 ,栈大小为 111 。

第三次操作出堆,此时内存为 {5,2,45,2,45,2,4},堆大小为 000 ,栈大小为 111 。

第四次操作出堆,但堆为空,因此系统崩溃,输出错误信息并将操作前内存输出,程序结束。

登录后即可使用 AI 分析。

模式
倒计时时长
:

最长 10 小时 59 分;应用后按此时长重新开始。

提示:点击提交记录在左侧题面区域查看详情
题库
AI分析设置
留空使用官方API Key,每天有次数限制(自定义API Key仅限会员和管理员使用,不限次数)
会员和管理员可切换模型;切到 Kimi/智谱/通义/豆包时需填写对应供应商 API Key
升级会员,可将运行与提交冷却时间缩短至 1 秒起

Status

  • Judging Queue
  • Service Status

Development

  • Open Source

Support

  • Help
  • Contact Us

About

  • About
  • Privacy
  • Terms of Service
  • Copyright Complaint
  1. Language
    1. English
    2. 한국어
    3. 简体中文
    4. 正體中文
  2. Legacy mode
  3. Theme
    1. Light
    2. Dark
  1. 京ICP备2025123107号-1
  2. Worker 1, 44ms
  3. Powered by Hydro v5.0.0-beta.18 Community
CLOSE


ScanQRCodePrompt

请使用微信扫描下方二维码完成注册

Forgot password or username?