899. 赛博计算机 2077

单点时限: 2.0 sec

内存限制: 512 MB

上次说道 Smith 家的一台古老的计算机,由于 Smith 是一名软硬件全栈大佬,他成功扩展了那台计算机,现在它可以执行更多的指令。

魔改后的机器一共有 26 个无差别的寄存器,分别为 AX, BX, $\ldots$, ZX,在指令中他们可以互相替代,下面的表格列出了所有支持的指令。

数据操纵指令:

指令 中文名 格式 解释
IN 读操作指令 IN AX,number 读数据存储在 AX 中,AX=number
OUT 写操作指令 OUT AX 输出 AX 的值
MOV 传送指令 MOV AX,BX AX=BX
XCHG 交换指令 XCHG AX,BX 交换 AX 和 BX 寄存器中储存的值

运算指令:

指令 中文名 格式 解释
ADD 加法指令 ADD AX,BX AX=AX+BX
SUB 减法指令 SUB AX,BX AX=AX-BX
MUL 乘法指令 MUL AX,BX AX=AX * BX
DIV 除法指令 DIV AX,BX AX=AX/BX(整除)
MOD 取模指令 MOD AX,BX AX=AX%BX
AND 位与指令 AND AX,BX AX=AX&BX
OR 位或指令 OR AX,BX AX=AX|BX
XOR 异或指令 XOR AX,BX AX=AX^BX

每次运算的时候,第一个操作数都会被修改,这样写代码太难受了,于是 Smith 为所有的运算指令都添加了第二种三参数调用的形式,以下仅以加法指令和减法指令为例,但请一定记住所有运算指令均可如此调用:

指令 中文名 格式 解释
ADD 扩展加法指令 ADD AX,BX,CX AX=BX+CX
SUB 扩展减法指令 SUB AX,BX,CX AX=BX-CX

例如:以下代码可以实现表达式 (2+3*5)/6 和表达式 (2+3*5)%6 的计算并输出计算结果。

IN AX,3
IN BX,5
MUL AX,BX
IN CX,2
ADD CX,AX
IN BX,6
DIV DX,CX,BX
OUT DX
MOD DX,CX,BX
OUT DX

输入用这种特殊标记编程语言编写的一段代码,请编写一个翻译器,对代码进行翻译,输出最后运行结果。

输入格式

输入代码片段。

注意:读的数据均为int型整数。所有被计算的数值(包括中间值)均保证在int范围内。

输入保证不包含任何多余的空白字符,在开始执行前,所有寄存器的值可以视为已经清零,过程中不存在非法操作(例如除以 0)。

  • 对于 30% 的数据指令数 $\leq 200~000$,不存在三参数调用形式 IN 指令的参数均为非负整数;
  • 对于 70% 的数据指令数 $\leq 200~000$,不存在三参数调用形式;
  • 对于 85% 的数据指令数 $\leq 200~000$,没有限制;
  • 对于 100% 的数据指令数 $\leq 1~000~000$,没有限制;

输出格式

对于每个 OUT 指令,输出一行表示结果。

样例

Input
IN AX,3
IN BX,5
MUL AX,BX
IN CX,2
ADD CX,AX
IN BX,6
DIV DX,CX,BX
OUT DX
MOD DX,CX,BX
OUT DX
Output
2
5
Input
IN AX,-2
IN BX,-3
MOD BX,AX
OUT BX
Output
-1
Input
IN AX,3
IN BX,5
MUL AX,BX
IN CX,2
ADD CX,AX
IN BX,6
DIV CX,BX
OUT CX
Output
2

285 人解决,346 人已尝试。

411 份提交通过,共有 1572 份提交。

2.5 EMB 奖励。

创建: 6 年,4 月前.

修改: 1 年,6 月前.

最后提交: 4 周前.

来源: N/A

题目标签