acwing 1097 池塘計數

2022-10-06 14:39:27 字數 1237 閱讀 4169

目錄演算法求解

參考文章

題目傳送門

農夫約翰有一片 n∗mn∗m 的矩形土地。

最近,由於降雨的原因,部分土地被水淹沒了。

現在用乙個字元矩陣來表示他的土地。

每個單元格內,如果包含雨水,則用」w」表示,如果不含雨水,則用」.」表示。

現在,約翰想知道他的土地中形成了多少片池塘。

每組相連的積水單元格集合可以看作是一片池塘。

每個單元格視為與其上、下、左、右、左上、右上、左下、右下八個鄰近單元格相連。

請你輸出共有多少片池塘,即矩陣中共有多少片相連的」w」塊。

輸入格式

第一行包含兩個整數 nn 和 mm。

接下來 nn 行,每行包含 mm 個字元,字元為」w」或」.」,用以表示矩形土地的積水狀況,字元之間沒有空格。

輸出格式

輸出乙個整數,表示池塘數目。

資料範圍

1≤n,m≤10001≤n,m≤1000

輸入樣例:

10 12

w........ww.

.www.....www

....ww...ww.

.........ww.

.........w..

..w......w..

.w.w.....ww.

w.w.w.....w.

.w.w......w.

..w.......w.

輸出樣例:
3
st[i][j]表示乙個點有沒有被dfs放過過

遍歷整個圖

#include#include#includeusing namespace std;

const int n = 1010;

char g[n][n]; //

int n, m;

int res;

bool st[n][n]; // 標記是不是被訪問過了

int dx[8] = , dy[8] = ;

void dfs(int x, int y)

} } int main()

getchar();

} for(int i = 1; i <= n; i++)

}} cout << res << endl;

return 0;

}

\(o(m*n)\)

AcWing 109 天才ACM 倍增

題目鏈結 這道題最基本的想法就是一次尋找每個區間,對於每個區間,用二分來判定其最大長度。每次check的時候,對區間排序,不斷取出不大於m對最大值與最小值求值即可。然後你就喜提tle了,笑如果用倍增來代替二分的話能過,不過其實倍增最壞複雜度和二分一樣,應該是資料沒有刻意來卡倍增。下面先給出倍增的 c...

AcWing 109 天才ACM 倍增 歸併

給定乙個整數 mm,對於任意乙個整數集合 ss,定義 校驗值 如下 從集合 ss 中取出 mm 對數 即 2 m2 m 個數,不能重複使用集合中的數,如果 ss 中的整數不夠 mm 對,則取到不能取為止 使得 每對數的差的平方 之和最大,這個最大值就稱為集合 ss 的 校驗值 現在給定乙個長度為 n...

10 9學習總結

先補上前兩天的學習總結,假裝現在是10.9.今天覆習了hja的講課內容,總結出重要的有3點,第一點是比賽的對於long long int的應用,如下 ifdef win32 define lld i64d else define lld lld endif int main 第二點是關於noip 2...