序号 | 标题 | 作者 | 发表时间 | 费用 | 订购数 | 操作 |
---|
算式的排版常常是一件非常令人头疼的事情。不过对于简单的算式,这项工作就并不是很复杂了。
给定一个只包含常数(均为整数,不超过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.........
上面的.表示应该填充的空格。