运算器能完成的运算种类及所需时间如下表所示:
运算种类 | 运算操作 | 所需运算时间 |
1 | C=A+B | Tadd |
2 | C=A-B | Tsub |
3 | C=A*B | Tmul |
4 | C=A/B | Tdiv |
在计算复杂的四则混合运算表达式时,运算器就变成了高速计算的“瓶颈”。为了得到更快的运算速度,计算机科学家们设计了一种有两个运算器的并行计算机,它的结构简图如图二所示。
由于两个运算器可以同时进行运算,因此大大提高了整机运算速度。
该并行计算机有以下两种控制指令:
运算指令
OP Time Alu_no Operate_no Address1 Address2 Address3
其中OP为运算指令标识符,其后有六个参数:
Time表示执行该指令的开始时间
Alu_no表示承担该次运算操作的运算器编号(Alu_no∈{1,2})
Operate_no表示该次运算的运算种类(Operate_no∈{1,2,3,4})
Address1,Address2表示待运算的两个源操作数的存储单元地址
Address3表示该次运算结束后存放运算结果的存储单元地址
结束指令
END Time Address
其中END为结束指令标识符,其后有两个参数:
Time表示整个控制程序的结束时间
Address表示存放最终计算结果的存储单元地址
每个运算器同一时刻可以执行一条运算指令,结束指令表示控制程序结束。
现在需要你编一个程序,对给定的待计算的表达式,自动生成一段控制程序,使图二所示的并行计算机能够正确计算该表达式的值,并使总运算时间尽量小。
第一行为四个不超过1000的正整数,依次为Tadd、Tsub、Tmul和Tdiv。第二行为待计算的四则混合运算表达式(长度不超过255个字符),表达式中的变量用大写英文字母表示,各变量的初始值依照变量的字母顺序依次存放在地址为1,2,…的存储单元中。输入中同一行相邻两项之间用一个或多个空格隔开
为完成该表达式计算的最优控制指令段。指令根据其开始执行时间先后依次输出(对于开始执行时间相同的两条指令,输出先后次序不限),每条指令占一行。
同一行相邻两项之间用一个空格隔开。
约定
控制程序初始执行时间从0时刻开始。
问题中所涉及的各种时间量的单位相同。
存储器的存储单元最多有1K个。
由于数据读写时间同运算时间相比较小,可忽略不计。
如果两个运算器同时对同一个存储单元进行操作,则运算器1先操作,运算器2后操作