結果
問題 |
No.421 しろくろチョコレート
|
ユーザー |
![]() |
提出日時 | 2016-09-10 05:54:07 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,754 bytes |
コンパイル時間 | 2,095 ms |
コンパイル使用メモリ | 176,020 KB |
実行使用メモリ | 13,952 KB |
最終ジャッジ日時 | 2024-11-16 19:40:46 |
合計ジャッジ時間 | 106,170 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 16 WA * 15 TLE * 34 |
ソースコード
#include <bits/stdc++.h> using namespace std; #define FOR(i,l,r) for(int i = (l);i < (r);i++) #define PB push_back #define MP make_pair #define ALL(x) (x).begin(),(x).end() typedef long long ll; int N,M; vector<string> board; int max_cost [50] [50]; bool vis [50] [50]; const int dx [] = {0,1,0,-1}; const int dy [] = {-1,0,1,0}; bool in_range(int y,int x) { return y >= 0 && y < N && x >= 0 && x < M; } pair<int,int> bfs(int ny,int nx) { queue< pair<int,int> > q; deque< deque<bool> > seen(N,deque<bool>(M,false)); q.push(MP(ny,nx)); pair<int,int> res; while(q.empty() == false){ int y = q.front().first,x = q.front().second; q.pop(); if(seen [y] [x]) continue; seen [y] [x] = true; res = MP(y,x); FOR(i,0,4){ int yy = y + dy [i],xx = x + dx [i]; if(in_range(yy,xx) && board [yy] [xx] != '.'){ q.push(MP(yy,xx)); } } } return res; } int dfs(int y,int x,bool flag) { if(vis [y] [x] == true) return 0; if(board [y] [x] == '.') return 0; vis [y] [x] = true; int res = 0; FOR(i,0,4){ int yy = y + dy [i],xx = x + dx [i]; if(in_range(yy,xx)){ res = max(dfs(yy,xx,flag),res); } } vis [y] [x] = flag; return res + 1; } int main() { cin.tie(0); ios::sync_with_stdio(false); cin >> N >> M; board.resize(N); int black = 0,white = 0; FOR(i,0,N){ cin >> board [i]; black += count(ALL(board [i]),'b'); white += count(ALL(board [i]),'w'); } int ans = 0; FOR(i,0,N){ FOR(j,0,M){ pair<int,int> pos = bfs(i,j); int y = pos.first,x = pos.second; int res = dfs(y,x,false); ans += res / 2 * 100; black -= res / 2; white -= res / 2; dfs(y,x,true); } } ans += min(black,white) * 10; ans += max(black,white) - min(black,white); cout << ans << endl; return 0; }