OIBH信息学练习赛 #4
概览
题目 四塔问题 算式排版 撕邮票
时限 1s 2s 10s
内存限制 1024K 4096K 2048K
分值 100 150 150
----------------------------------------
试题1. 四塔问题
“汉诺塔”,是一个众所周知的古老游戏。现在我们把问题稍微改变一下:如果一共有4根柱子,
而不是3根,那么至少需要移动盘子多少次,才能把所有的盘子从第1根柱子移动到第4根柱子上呢?
为了编程方便,您只需要输出这个结果mod 10000的值。
输入
一个正整数n。(0<n<=50000)
输出
一个正整数,表示把n个盘子从第1根柱子移动到第4根柱子需要的最少移动次数mod 10000的值。
样例输入
15
样例输出
129
----------------------------------------
试题2. 算式排版
算式的排版常常是一件非常令人头疼的事情。不过对于简单的算式,这项工作就并不是很复杂了。
给定一个只包含常数(均为整数,不超过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
----------------------------------------
试题3. 撕邮票
在一个无限大的联票中,可以撕出多少种本质不同的n联票呢?
例如:n=3时,可以得到:
* ** * ** *
** *** * * * **
*
但是本质不同的只有2种,即:
*** 和 **
*
输入:
一个自然数n(0<n<13)。
输出:
一个自然数,代表本质不同的方案总数。
样例输入:
4
样例输出:
5
声明:直接判断+输出,不能获得任何分数。