Me:: Wonderstone

Dirty Deeds Done Dirt Cheap

题目 Mini-Machine & The Loop

题目背景

1936年,艾伦·图灵提出了图灵机的理论模型。一台图灵机由一条无限长的纸带、一个能够读写符号并改变状态的控制器组成。尽管结构如此简单,它却能够执行任何机械可计算的过程,为现代计算机科学奠定了基础。今天的计算机虽然复杂得多,其核心依然遵循着冯·诺依曼体系结构:存储程序,顺序执行

题目描述

小明设计了一台迷你虚拟机,该机器包含 4 个 64 位有符号整数寄存器,名称分别为 r0, r1, r2, r3
虚拟机能够执行一个由若干指令组成的程序。初始时所有寄存器的值均为 0,程序从第 1 行开始顺序执行,直到遇到 HLT 指令时停机。

虚拟机支持的指令集如下(每行一条指令,操作数之间用单个空格分隔):

指令格式 含义
MOV dst, src 将源操作数 src 的值复制到目标寄存器 dstdst 必须是寄存器名;src 可以是寄存器名或整数常量(如 123-5)。
ADD dst, src dst = dst + srcsrc 可以是寄存器名或整数常量。
SUB dst, src dst = dst - srcsrc 可以是寄存器名或整数常量。
JMP offset 无条件跳转到“当前行号 + offset”的位置。offset 是一个整数。行号从 1 开始计数。
JNZ reg, offset 若寄存器 reg 的当前值 不为 0,则跳转到“当前行号 + offset”;否则顺序执行下一条。
HLT 停机,虚拟机立即退出。

程序结构保证

  • 程序有且仅有一条跳转指令,是一条 JNZ,且它的 offset 为负数(即往回跳),从而形成一个唯一的循环
  • 这个 JNZ 所在的循环体内部没有任何其它跳转指令。也就是说,循环体由若干条纯算术指令(MOVADDSUB)组成,最后紧跟着一条 JNZ
  • 循环之前可能有一段顺序执行的“前缀”指令(也可以为空);在 JNZ 之后只有一条 HLT 指令,后面没有任何指令。
  • 程序保证会最终停机(循环一定会终止)。
  • 所有寄存器值、常数以及中间结果均在 $[-10^{18},10^{18}]$ 范围内,最终答案也保证在此范围内。

现在,给你一段符合上述约束的程序,请你输出虚拟机停机时 r0, r1, r2, r3 的值。

输入格式

第一行一个整数 M,表示指令的总行数。
接下来 M 行,每行一条指令,格式如上所述。行首行尾没有多余空格,操作数之间用单个空格隔开。

输出格式

一行四个整数,依次为寄存器 r0, r1, r2, r3 的值,之间用空格分隔。

样例输入 1

1
2
3
4
5
6
7
6
MOV r0, 5
MOV r1, 0
ADD r1, r0
SUB r0, 1
JNZ r0, -2
HLT

样例输出 1

1
0 15 0 0

解释
前缀指令将 r0 置为 5,r1 置为 0。
循环体为第 3~5 行:

  • ADD r1, r0r1 += r0
  • SUB r0, 1r0 -= 1
  • JNZ r0, -2 → 若 r0 != 0 则跳回第 3 行

该循环执行 5 次:r1 依次累加 5, 4, 3, 2, 1,总和为 15;r0 最终变为 0,退出循环,执行 HLT

样例输入 2

1
2
3
4
5
6
7
5
MOV r0, 1000000000
MOV r1, 0
ADD r1, 3
SUB r0, 1
JNZ r0, -2
HLT

样例输出 2

1
0 3000000000 0 0

数据范围与提示

  • 对于 30% 的测试数据,循环实际执行次数 ≤ 1000。
  • 对于 100% 的测试数据,1 ≤ M ≤ 2000,循环执行次数可能高达 $10^{12}$。所有数值在 64 位有符号整数范围内。

Me

我是人,男,2012年9月30日生,还没死。

现在就读于重庆市南x中学初一x班,正在学习 OI。

呃,没什么好说的,平时就喜欢听音乐、喝奶茶和找某同学白嫖他 Steam 上的游戏,不喜欢吃蘑菇

这个 GitHub Page 的个人站于公元2026年4月5日,同年清明节前一天创建。

User

放一下在其他网站上的账号,有一些不方便透露就不放了。

  • 洛谷:WonderStone_

  • 酷狗:Wonderstone

  • QQ:WonderStone.

  • GitHub:Wonderstone-0930

  • ……

没了。

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

0%