P1259 黑白棋子的移動

2021-09-25 03:28:21 字數 1235 閱讀 1270

我們先分析一下樣例

ooooooo*******--

oooooo--******o*

oooooo******--o*

ooooo--*****o*o*

ooooo*****--o*o*

oooo--****o*o*o*

oooo****--o*o*o*

ooo--***o*o*o*o*

ooo*o**--*o*o*o*

o--*o**oo*o*o*o*

o*o*o*--o*o*o*o*

--o*o*o*o*o*o*o*

每兩行分一組的時候,可以很明顯地看到規律.

然而後四行我並沒有發現什麼規律,於是無恥地打了乙個表.

打表原理:

ooo*o**--* o*o*o*

o--*o**oo* o*o*o*

o*o*o*--o* o*o*o*

--o*o*o*o* o*o*o*

後6個字元為固定的"o*o*o*"

於是只要記錄

ooo*o**--*,

o--*o**oo*,

o*o*o*--o*,

--o*o*o*o*

**如下

#include

#include

using

namespace std;

int n;

char ch[

205]

;//儲存棋子的狀態

void

swap

(char

&a,char

&b)//交換函式

void

output()

void

movechess

(int start,

int end)

string out[4]

=;//打表qwq

intmain()

string ss;

for(

int i =

0; i < n -

4; i++

) ss +

="o*"

;for

(int i =

0; i <

4; i++

) cout << out[i]

<< ss << endl;

}

P1259 黑白棋子的移動

有2n個棋子 n 4 排成一行,開始為位置白子全部在左邊,黑子全部在右邊,如下圖為n 5的情況 移動棋子的規則是 每次必須同時移動相鄰的兩個棋子,顏色不限,可以左移也可以右移到空位上去,但不能調換兩個棋子的左右位置。每次移動必須跳過若干個棋子 不能平移 要求最後能移成黑白相間的一行棋子。如n 5時,...

P1259 黑白棋子的移動 遞迴

有2n個棋子 n 4 排成一行,開始為位置白子全部在左邊,黑子全部在右邊,如下圖為n 5的情況 移動棋子的規則是 每次必須同時移動相鄰的兩個棋子,顏色不限,可以左移也可以右移到空位上去,但不能調換兩個棋子的左右位置。每次移動必須跳過若干個棋子 不能平移 要求最後能移成黑白相間的一行棋子。如n 5時,...

洛谷 P1259 黑白棋子的移動

題目鏈結 遞迴 分治 打表 這題.一上來讓我有點兒蒙啊.但其實就在於找規律,舉幾個例子自己動手寫一下就恍然大悟了。比如這樣 當然,題目條件是4 n 100 只需要先將中間緊挨的黑白棋子和空格交換,再將最後兩個黑色棋子與空格交換就好啦!之後就很歡快地去敲鍵盤了!結果全部wa掉。然後才知道我畫的每個例子...