藍橋杯 方格分割(第八屆第四題)

2021-09-12 07:38:13 字數 1849 閱讀 3423

試計算: 包括這3種分法在內,一共有多少種不同的分割方法。 注意:旋轉對稱的屬於同一種分割法。

請提交該整數,不要填寫任何多餘的內容或說明文字。

第一次做的時候有點不理解中心對稱,查了一下

中心對稱是指把乙個圖形繞著某一點旋轉180°,如果它能夠與另乙個圖形重合,那麼就說這兩個圖形關於這個點對稱或中心對稱(central symmetry)。

開始的思路是用dfs搜尋小方格的個數搜到18就停止,仔細分析後發現行不通,因為有時候有18個小格仔,兩個格仔並不相等。而且終止條件也不對,萬一沒搜到邊界就滿足18終止了,怎麼辦。於是調整思路,分割線將圖形分成完全相同,於是猜想這兩個圖形肯定是中心對稱的,這個分割線也是,看了一下示例發現還真是,這下就簡單了,從(3,3)開始兩條線往邊界走,由於旋轉對稱的屬於同一種分割法。所以往四周走是一樣的,我們可以只往乙個方向走。我們就往最下面走,row==0&&col>0&&col<6為終止條件,寫出**,

#include

using

namespace std;

int vis[7]

[7];

int dir[4]

[2]=

,,,}

;int cnt;

void

dfs(

int row,

int col)

if(row<=

0||row>=

6||col<=

0||col>=

6||vis[row]

[col]

)return

; vis[row]

[col]=1

; vis[

6-row][6

-col]=1

;for

(int i=

0;i<

4;i++

)dfs

(row+dir[i][0

],col+dir[i][1

]); vis[row]

[col]=0

; vis[

6-row][6

-col]=0

;}intmain()

上面這份**不太優雅,為了只到一遍需要一些不太直觀的條件,參考網友的部落格,最終為下面這樣,從中心出發,只要到達邊界結果就加1,總結果除以4即所得。

#include

using

namespace std;

int vis[7]

[7];

int dir[4]

[2]=

,,,}

;int cnt;

void

dfs(

int row,

int col)

if(row<

0||row>

6||col<

0||col>

6||vis[row]

[col]

)return

; vis[row]

[col]=1

; vis[

6-row][6

-col]=1

;for

(int i=

0;i<

4;i++

)dfs

(row+dir[i][0

],col+dir[i][1

]); vis[row]

[col]=0

; vis[

6-row][6

-col]=0

;}intmain()

參考:

中心對稱

第八屆藍橋杯 第四題方格分割

6x6的方格,沿著格仔的邊線剪開成兩部分。要求這兩部分的形狀完全相同。如圖 p1.png,p2.png,p3.png 就是可行的分割法。試計算 包括這3種分法在內,一共有多少種不同的分割方法。注意 旋轉對稱的屬於同一種分割法。請提交該整數,不要填寫任何多餘的內容或說明文字。說明 這道題用到的是深度優...

第八屆藍橋杯第四題方格分割

題目如下 6x6的方格,沿著格仔的邊線剪開成兩部分。要求這兩部分的形狀完全相同。如圖 p1.png,p2.png,p3.png 就是可行的分割法。試計算 包括這3種分法在內,一共有多少種不同的分割方法。注意 旋轉對稱的屬於同一種分割法。請提交該整數,不要填寫任何多餘的內容或說明文字。思路如下 從正方...

第八屆藍橋杯Java A組第四題方格分割題解

6x6的方格,沿著格仔的邊線剪開成兩部分。要求這兩部分的形狀完全相同。如圖 p1.png,p2.png,p3.png 就是可行的分割法。試計算 包括這3種分法在內,一共有多少種不同的分割方法。注意 旋轉對稱的屬於同一種分割法。題目思路 這道題確實看上去有點棘手,基本是用深搜的解法,但是深搜需要遍歷的...