待你長髮及腰

2022-01-10 21:47:44 字數 992 閱讀 1315

就問你們出題人夠不夠良心,出個簡單廣搜,而且資料還是很水的,寫不對也有不少分

不會廣搜的,或者不熟悉的先學學吧

題解配圖純手畫┐(『~`;)┌ ,凑活看吧qwq

然後這題有不少解法,這裡就只提供一種了

這道題呢,容易想到,搜尋白棋聯通塊,同時統計周圍的氣數(即空白格數),然後對於氣數為一的聯通塊,取大小最大的落子,

再加上開局已死的白棋個數,即ans=max+已死白棋數

但是想想就會發現,這麼直接蒐會有一些漏洞

比如這個:

可以看到,這個圖中,我們在點1和點2會分別搜到空白,加一口氣,這樣下來就會有兩口氣

這個地方錯了?估計你就沒什麼分了……

所以我們通過乙個二維的breath陣列來記錄每個點是否曾被統計

氣數的統計時,只統計還未被標記的點

那麼經過仔細思考,問題又來了

如圖:

在統計左側聯通塊時,我們把兩口氣都標沒了,然後右側就視為沒氣了,顯然是不對的

但是實測,這樣是能拿60分的( ̄▽ ̄)~*

解決方案也不難想,我們可以開乙個棧,把所有標沒的氣恢復,一次搜尋結束後再把氣標回來

在瞎湊一下,我們發現,還有乙個小問題

再給張圖:

在這張圖中,最大一口氣聯通塊個數為4,但是答案是7啊,堵住圖中的氣能殺敵人兩片棋

但是表慌,錯了也有90分

觀察到這樣一種性質,我們要統計的是只剩一口氣的聯通塊,不妨把合法聯通塊大小作為權值掛到那個氣的位置,

這樣我們只需找出權值最大的位置就好了

所以,答案最終是ans=max+dead