藍橋杯 2023年第九屆真題 全球變暖

2021-10-10 00:24:57 字數 1839 閱讀 8462

你有一張某海域nxn畫素的**,".「表示海洋、」#"表示陸地,如下所示:

...

....

.##...

..##...

....

.##.

..####...

.###...

....

.

其中"上下左右"四個方向上連在一起的一片陸地組成一座島嶼。例如上圖就有2座島嶼。

由於全球變暖導致了海面上公升,科學家**未來幾十年,島嶼邊緣乙個畫素的範圍會被海水淹沒。

具體來說如果一塊陸地畫素與海洋相鄰(上下左右四個相鄰畫素中有海洋),它就會被淹沒。

例如上圖中的海域未來會變成如下樣子:

...

....

....

....

....

....

....

....

.#....

....

....

....

請你計算:依照科學家的**,**中有多少島嶼會被完全淹沒。

【輸入格式】

第一行包含乙個整數n。 (1 <= n <= 1000)

以下n行n列代表一張海域**。

**保證第1行、第1列、第n行、第n列的畫素都是海洋。

【輸出格式】

乙個整數表示答案。

【輸入樣例】

7

...

....

.##...

..##...

....

.##.

..####...

.###...

....

.

【輸出樣例】

1準備工作:

錯誤思路:一開始沒認真讀題,被樣例誤導,然後雙重迴圈遍歷陣列mp,並判斷每乙個位置上下左右是否有任一方向為『.』,只要四個方向都不是『.』就不會被淹沒,count++。

wa了一遍發現我所求和題目根本不相符,其實存在乙個島嶼中有多個位置四個方向都是『#』的。

換句話說,題目所求可以分為兩步:

①在圖中有多少多個連通塊(島嶼)?

②哪些連通塊(島嶼)中存在乙個位置四邊相鄰的都是『#』.

正確思路

從陣列mp開始遍歷,每遍歷到乙個未被訪問過的『#』,就開始dfs找相連的連通塊,並將連通塊都設為訪問過的狀態(使用陣列vis標記)。

並在邊搜尋時,判斷是否存在位置相鄰的四個方向皆為『#』,若存在則ans++,若乙個都不存在則ans等於0。

最後輸出ans值為0的個數,即為淹沒島嶼的個數。

#include

using

namespace std;

const

int maxn =

1005

;char mp[maxn]

[maxn]

;int vis[maxn]

[maxn]

;int ans[

100005];

int n;

void

dfs(

int x,

int y,

int cnt)

intmain()

}}int sum =0;

for(

int i =

0; i < len; i++)if

(ans[i]==0

) sum++

; cout << sum << endl;

}

藍橋杯 2023年第九屆真題 全球變暖 廣搜

你有一張某海域nxn畫素的 表示海洋 表示陸地,如下所示 其中 上下左右 四個方向上連在一起的一片陸地組成一座島嶼。例如上圖就有2座島嶼。由於全球變暖導致了海面上公升,科學家 未來幾十年,島嶼邊緣乙個畫素的範圍會被海水淹沒。具體來說如果一塊陸地畫素與海洋相鄰 上下左右四個相鄰畫素中有海洋 它就會被淹...

藍橋杯 2023年第九屆真題 搭積木

藍橋杯 2018年第九屆真題 搭積木 小明對搭積木非常感興趣。他的積木都是同樣大小的正立方體。在搭積木時,小明選取 m 塊積木作為地基,將他們在桌子上一字排開,中間不留空隙,並稱其為第0層。隨後,小明可以在上面擺放第1層,第2層,最多擺放至第n層。擺放積木必須遵循三條規則 其中,小明不喜歡的位置都被...

藍橋杯 2023年第九屆真題 防禦力

還有兩題放在最後寫,不是說它難,而是它有問題。基本可以確定防禦力是錯了,答案沒有按照字典序排序。然後去知乎翻了一波往年的評價,發現那次比賽有三次勘誤,可能包括這個 因為也沒有人提到 採油這題無意中發現有人說了做法,但是其實是有缺陷的,雖然可以過藍橋杯的資料,但是構造了一組樣例把它hack了。所以可能...