SP1683 EXPRESS - Expressions
题目描述
在通常的算术表达式中,运算符位于两个操作数之间,这种书写方式被称为中缀表示法。例如,表达式 $(x+y)\*(z-w)$ 就是中缀表示法。然而,若将表达式用后缀表示法(逆波兰表示法)书写,则编程求值会更简单。在后缀表示法中,运算符跟在两个操作数之后,操作数本身也可能是表达式。举例来说,$x\ y\ +\ z\ w\ -\ *$ 是上面所述算术表达式的后缀形式。这样书写时,无需使用括号。
计算后缀表达式时,可以使用栈这种数据结构。栈支持两种操作:
1. **push**:将一个数字压入栈顶。
2. **pop**:从栈顶弹出一个数字。
在求值过程中,我们从左到右遍历表达式。当遇到一个数字时,将其压入栈中;当遇到一个运算符时,从栈中弹出两个数字,使用该运算符进行计算,并将结果重新压入栈。以下是处理运算符 O 的伪代码示例:
```
a := pop();
b := pop();
push(b O a);
```
计算完成后,栈中剩余的那个数字就是表达式的结果。
假设我们用队列来代替栈,队列也有 push 和 pop 操作,但含义有所不同:
1. **push**:将一个数字加入队列末尾。
2. **pop**:从队列前端取出一个数字。
你能否修改给定的后缀表达式,使得使用队列求值时,结果与使用栈求值时相同?
输入格式
第一行输入一个整数 **T** ($T \leq 200$),表示测试用例的数量。接下来的 **T** 行中,每行是一个后缀表达式。算术运算符用大写字母表示,数字用小写字母表示。可以假设每个表达式长度小于 10000 个字符。
输出格式
对于每个输入的表达式,输出一个等价的新的后缀表达式,使得用队列计算时结果与用栈计算时相同。注意,不能假设运算符具有结合性或交换性,这样才能保证输出唯一。
## 样例输入
```
2
xyPzwIM
abcABdefgCDEF
```
## 样例输出
```
wzyxIPM
gfCecbDdAaEBF
```
**本翻译由 AI 自动生成**