結果
問題 |
No.421 しろくろチョコレート
|
ユーザー |
![]() |
提出日時 | 2016-09-07 21:26:34 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,265 bytes |
コンパイル時間 | 865 ms |
コンパイル使用メモリ | 81,448 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-16 08:41:14 |
合計ジャッジ時間 | 2,461 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 32 WA * 33 |
ソースコード
//連結成分中の白黒の数を数えるだけ。 WAになってないとダメ #include <iostream> #include <vector> #include <queue> using namespace std; int dx[] = {0,0,1,-1}; int dy[] = {1,-1,0,0}; int main(){ int n,m; cin >> n >> m; vector<string> s(n); for(auto& x : s) cin >> x; vector<vector<bool>> visit(n, vector<bool>(m, false)); int ans = 0; int b = 0, w = 0; for(int r=0; r<n; r++) for(int c=0; c<m; c++){ if(visit[r][c] || s[r][c]=='.') continue; queue<int> q; q.push(r*m + c); visit[r][c] = true; int cnt_b = 0; int cnt_w = 0; while(q.size()){ int p = q.front(); q.pop(); int y = p/m; int x = p%m; cnt_b += s[y][x] == 'b'; cnt_w += s[y][x] == 'w'; for(int k__=0; k__<4; k__++){ int new_x = x + dx[k__]; int new_y = y + dy[k__]; if(new_x < 0 || new_x >= m || new_y < 0 || new_y >= n) continue; if(visit[new_y][new_x] || s[new_y][new_x] == '.') continue; visit[new_y][new_x] = true; q.push(new_y * m + new_x); } } int d = min(cnt_b, cnt_w); ans += d*100; b += cnt_b - d; w += cnt_w - d; } ans += min(b,w) * 10; ans += max(b,w) - min(b,w); cout << ans << endl; return 0; }