結果
| 問題 | No.697 池の数はいくつか |
| ユーザー |
|
| 提出日時 | 2018-06-11 00:01:48 |
| 言語 | C++14 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 997 ms / 6,000 ms |
| コード長 | 1,098 bytes |
| 記録 | |
| コンパイル時間 | 1,085 ms |
| コンパイル使用メモリ | 84,288 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-11-08 07:43:50 |
| 合計ジャッジ時間 | 9,531 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 32 |
ソースコード
#include <array>
#include <iostream>
#include <queue>
#include <tuple>
#include <vector>
using namespace std;
int R, C;
vector<vector<bool>> G;
// N E S W
constexpr array<int, 4> dr = {-1, 0, 1, 0},
dc = { 0, 1, 0,-1};
constexpr int dr_size = dr.size();
void f(int r, int c) {
queue<pair<int, int>> que;
que.emplace(r, c);
G[r][c] = false;
while(!que.empty()) {
tie(r, c) = que.front(); que.pop();
for(int i=0; i<dr_size; ++i) {
int nr = r + dr[i],
nc = c + dc[i];
if(!(0 <= nr && nr < R && 0 <= nc && nc < C)) { continue; }
if(G[nr][nc]) {
G[nr][nc] = false;
que.emplace(nr, nc);
}
}
}
}
int main(void) {
scanf("%d%d", &R, &C);
G.assign(R, vector<bool>(C, false));
int x;
for(int r=0; r<R; ++r) {
for(int c=0; c<C; ++c) {
scanf("%d", &x);
G[r][c] = x==1;
}
}
int res = 0;
for(int r=0; r<R; ++r) {
for(int c=0; c<C; ++c) {
if(G[r][c]) {
f(r, c);
++res;
}
}
}
printf("%d\n", res);
return 0;
}