Problem1513--黑白棋子的移动

1513: 黑白棋子的移动

[Creator : ]
Time Limit : 1.000 sec  Memory Limit : 128 MiB

Description

      有2n个棋子(n≥4)排成一行,开始为位置白子全部在左边,黑子全部在右边,如下图为n=5的情况:

       ○○○○○●●●●●

       移动棋子的规则是:每次必须同时移动相邻的两个棋子,颜色不限,可以左移也可以右移到空位上去,但不能调换两个棋子的左右位置。每次移动必须跳过若干个棋子(不能平移),要求最后能移成黑白相间的一行棋子。如n=5时,成为:

       ○●○●○●○●○●

       任务:编程打印出移动过程。

Input

n

Output

打印出移动过程。

Sample Input Copy

7

Sample Output Copy

step 0:ooooooo*******--
step 1:oooooo--******o*
step 2:oooooo******--o*
step 3:ooooo--*****o*o*
step 4:ooooo*****--o*o*
step 5:oooo--****o*o*o*
step 6:oooo****--o*o*o*
step 7:ooo--***o*o*o*o*
step 8:ooo*o**--*o*o*o*
step 9:o--*o**oo*o*o*o*
step10:o*o*o*--o*o*o*o*
step11:--o*o*o*o*o*o*o*

HINT

观察发现,对于一个规模为n的问题,我们可以使用以下步骤将其变为一个规模为n - 1的子问题
1、将中间o*交界的地方的ox移到末尾
2、将最后两个*移动到空格上

这样两次移动之后,后两个格子就固定了下来,而其余格子就是一个n - 1规模的子问题,递归解决即可。当n很小时,可以手动构造出方案

Source/Category

分治