899. 赛博计算机 2077

Hard分支循环数据结构

时间限制:2000 ms

内存限制:512 MiB

题面

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

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

数据操纵指令:

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

运算指令:

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

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

指令中文名格式解释
ADD扩展加法指令ADD AX,BX,CXAX=BX+CX
SUB扩展减法指令SUB AX,BX,CXAX=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% 的数据指令数 200 000\leq 200~000,不存在三参数调用形式 IN 指令的参数均为非负整数;
  • 对于 70% 的数据指令数 200 000\leq 200~000,不存在三参数调用形式;
  • 对于 85% 的数据指令数 200 000\leq 200~000,没有限制;
  • 对于 100% 的数据指令数 1 000 000\leq 1~000~000,没有限制;

输出格式

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

样例

输入

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

输出

2
5

输入

IN AX,-2
IN BX,-3
MOD BX,AX
OUT BX

输出

-1

输入

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

输出

2