问题 4598 --算式排版

4598: 算式排版

题目描述

  算式的排版常常是一件非常令人头疼的事情。不过对于简单的算式,这项工作就并不是很复杂了。

给定一个只包含常数(均为整数,不超过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 复制
1+2+3+4+1/500
输出#1 复制
                 1
1 + 2 + 3 + 4 + ---
                500
输入#2 复制
(1+2+(3+1/4))^x
输出#2 复制
                 x
(        (    1)) 
(1 + 2 + (3 + -)) 
(        (    4)) 
输入#3 复制
{1+2+3^4}/100^100
输出#3 复制
         4
1 + 2 + 3 
----------
     100  
  100 

提示

序号 标题 作者 发表时间 费用 订购数 操作