1345: 算式排版
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:0
解决:0
题目描述
算式的排版常常是一件非常令人头疼的事情。不过对于简单的算式,这项工作就并不是很复杂了。 给定一个只包含常数(均为整数,不超过50位),变量(都是1位小写字母)以及 +, -, *, /, ^(乘方),(, ), {, } 构成的算式。 对于任何一个排版之后的算式,我们定义这个算式的“边框”为恰好可以完全盖住这个算式的最小矩形。 例如,算式: 1 .... ---- ====> .... 1234 .... 的边框是一个3*4的矩形,而算式 1+2+3 ====> ..... 的边框是一个1*5的矩形。 { 和 } 的作用是规定计算的顺序,但是不必输出。而 ( 和 ) 不仅规定计算顺序,而且是必须输出的。 要求用以下的规则排版这个算式: [1] 对于算式A,(A)必须满足以下规则: 在A的边框左侧每一行增加一个(,右侧每一行增加一个)。 例如:((12345))的正确输出是: ((12345)) (1/12)的正确输出是: ( 1) (--) (12) [2] 对于算式A和算式B,A+B, A-B 和 A*B 必须满足以下规则: A的分数线和B的分数线对齐(输入保证不会存在繁分式),并且以+(-, *)左右都必须留有一个空格。算式A,B的分数线,即作为A+B的分数线。 例如:算式:x+y的正确输出是: x + y 算式:{1/x}-y的正确输出是: 1 - - y x 算式:x*(1/y)的正确输出是: (1) x * (-) (y) [3] 对于算式A和算式B,A^B必须满足以下规则:(保证A不是繁分式) 要求B的边框的左下角和A的边框的右上角重合。A^B的分数线定义为A的分数线。 例如:算式{x+y}^{y+x}的正确输出为: y + x x + y <--- 结果的分数线 算式{1/{x+y+z}}^(1/2)的正确输出为: (1) (-) (2) 1 --------- <--- 结果的分数线 x + y + z [4] 对于算式A和算式B,A/B必须满足以下规则:(保证A,B的底数不是分式) 要求A作为分子,B作为分母,A,B之间加上一条分数线。分数线的长度必须恰好既能覆盖A的边框,又能覆盖B的 边框。并且如果A或B边框的宽度(列数)小于分数线宽度,那么A或B右侧的空格个数不多于左侧空格个数,并且 至多比左侧少1个。 新添加的分数线,作为A/B结果的分数线。 例如:1/12345的正确输出是: 1 ----- <--- 结果的分数线 12345 1/1234的正确输出是: 1 ---- <--- 结果的分数线 1234 x^{1/23)/y^{a+b+c}的正确输出是: 1 -- 23 x ---------- <--- 结果的分数线 a + b + c y [5]另外,本题输出比较特别,要求输出算式的边框覆盖的部分必须被字符填满。也就是说,不足的地方全部 应该由空格填充。例如: ......1... .....--... .....23... ....x..... ---------- .a + b + c y......... 上面的.表示应该填充的空格。
输入
一个算式,占一行,长度不超过255个字符。
输出
满足上面要求的排版后的算式。保证算式长、宽均不超过100个字符。
样例输入 复制
1+2+3+4+1/500
样例输出 复制
1
1 + 2 + 3 + 4 + ---
500
提示
case2: input: (1+2+(3+1/4))^x output: x ( ( 1)) (1 + 2 + (3 + -)) ( ( 4)) case3: input: {1+2+3^4}/100^100 output: 4 1 + 2 + 3 ---------- 100 100