开始: 2026-10-20 00:00:00

【集训13】模拟赛 13

结束: 2026-10-23 00:00:00
当前  2026-10-28 17:03:09  类型: IOI  状态: 已经结束 

P4. 表达式转换(convert)
描述

现在有一个表达式,它里面有很多未知数的形式,小Z看到未知数就头疼,请你把数据匹配到相应的未知数的位置,输出其中缀表达式!

现在为了让电脑能够正常计算,请你也输出其前缀表达式的形式!

表达式只有'+,-,*,/'这四种。


**前缀表达式的递归定义**:

单个数的表达式,其前缀就是它自身;

若 E=(A\ op\ B),则 E 的前缀为 op 接上 A 的前缀、再接上 B 的前缀;

括号本身不产生记符;输出时相邻记符之间用一个空格隔开。

例如 (1+2)*(3-4) 的前缀是 `* + 1 2 - 3 4`,1+2*(3-4) 的前缀是 `+ 1 * 2 - 3 4`。

输入

第一行一个字符串 s,表示表达式,仅由小写字母 `x`、数字、`+`、`-`、`*`、`/`、`(`、`)` 组成,不含空格。

第二行一个正整数 n,表示数值的个数。

第三行 n 个正整数,第 i 个数为未知数 x_i 的值。

数据保证:s 中出现的未知数下标均在 1\sim n 之间,且 x_1,x_2,\dots,x_n **每个恰好出现一次**(出现顺序随机、互不重复);s 是一个合法的表达式。


输出

第一行一个字符串:代值后的中缀表达式。

第二行一个字符串:该表达式的前缀表达式,相邻记符之间恰好一个空格,行末无多余空格。


样例

输入

x1+x2*(x3-x4)
4
1 2 3 4

输出

1+2*(3-4)
+ 1 * 2 - 3 4
提示

把 x_1,x_2,x_3,x_4 依次替换为 1,2,3,4,中缀形式连同原有的括号原样输出。整个表达式是 (1+2*(3-4)) 的省略外层括号写法,加法在最外层且结合 1 与 2*(3-4),故前缀以 `+` 开头;2*(3-4) 的前缀为 `* 2 - 3 4`,拼接并按空格分隔记符后得到 `+ 1 * 2 - 3 4`。

对于全部数据,保证 1 \le n \le 10^5,|s| \le 10^6,未知数的取值不超过 10^9。

| 20% | 1~5 | 20 | n \le 20 | 

| 60% | 6~15 | 40(累计 60) | n \le 1000 |

| 100% | 16~25 | 40(累计 100) | n \le 10^5 | 


提交

题目参数
时间限制 1 秒
内存限制 128 MB
提交