Problem2359--暑假提高组模拟测试卷二 T2树的计数

2359: 暑假提高组模拟测试卷二 T2树的计数

Time Limit: 1.000 Sec  Memory Limit: 128 MB
Submit: 0  Solved: 0
[Submit] [Status] [Web Board] [Creator:][下载测试数据]

Description

我们都知道二叉树有多种形态,对于一系列的二叉树,我们用下列规则对其进行编号:

空二叉树编号为 0;

仅含一个结点的二叉树编号为 1;

结点数为 k 的二叉树的编号小于结点数为 k+1 的二叉树的编号;

对于结点数量相同的二叉树 T1,T2,如果 T1 的左子树编号大于 T2 的左子树编号或者 T1 ,T2 的左子树编号相同但 T1 的右子树编号大于 T2 的右子树编号,那么二叉树 T1 的编号大于二叉树 T2 的编号。

例如,按照上述规则进行编号的前 10 棵二叉树如下图所示:


  • 其中编号为 3 的二叉树左子树是仅含一个节点的二叉树,编号为 2 的二叉树左子树为空,满足条件 4 中左子树编号大的整棵树编号就大。

    现在给你一个正整数 n,表示二叉树的编号,让你画出编号为 n 的二叉树的形状。


Input

输入仅包含一行一个正整数 n,表示二叉树的编号。

Output

  1. 输出仅一行,表示编号为 n 的二叉树的形状。

    二叉树形状用下列字符串表示:

    如果是仅包含一个结点的二叉树,则直接输出 X

    如果二叉树的左、右子树编号分别为 L 和 R,已知 L 和 R 的输出形式分别为 L' 和 R',那么输出 (L')X(R'),让左子树为空时,输出 X(R'),当右子树为空时,输出 (L')X。


Sample Input

##样例 #1

###样例输入 #1
5

###样例输出 #1
X((X)X)

## 样例 #2

### 样例输入 #2

```
20
```

### 样例输出 #2

```
((X)X(X))X
```

## 样例 #3

### 样例输入 #3

```
237074288
```

### 样例输出 #3

```
X(((((X)X)X)X(X))X((((((X)X(((X(X))X)X))X)X)X(X))X))
```

HINT

【样例 1 解释】

编号为 5 的二叉树见题目图,根结点只有右子树,所以为 X(R'),右子树的根节点只有左子树,所以 R' 为 (X)X,整棵树为 X((X)X)。

【数据范围】

对于 30% 的数据,满足 1< n < 5000;


对于 100% 的数据,满足 1< n < 5* 10^8。

Source/Category

 

[Submit] [Status]