目錄演算法求解
參考文章
題目傳送門
農夫約翰有一片 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...