結果
問題 | No.421 しろくろチョコレート |
ユーザー |
|
提出日時 | 2024-12-22 18:15:09 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 6 ms / 2,000 ms |
コード長 | 2,449 bytes |
コンパイル時間 | 3,364 ms |
コンパイル使用メモリ | 193,104 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-12-22 18:15:15 |
合計ジャッジ時間 | 5,457 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 65 |
ソースコード
#include<bits/stdc++.h>#include<ext/pb_ds/assoc_container.hpp>#include<ext/pb_ds/hash_policy.hpp>#define Add(x, y) (x + y >= mod) ? (x + y - mod) : (x + y)#define lowbit(x) x & (-x)#define pi pair<ll, ll>#define pii pair<ll, pair<ll, ll>>#define iip pair<pair<ll, ll>, ll>#define ppii pair<pair<ll, ll>, pair<ll, ll>>#define ls(k) k << 1#define rs(k) k << 1 | 1#define fi first#define se second#define full(l, r, x) for(auto it = l; it != r; ++it) (*it) = x#define Full(a) memset(a, 0, sizeof(a))#define open(s1, s2) freopen(s1, "r", stdin), freopen(s2, "w", stdout);#define For(i, l, r) for(register int i = l; i <= r; ++i)#define _For(i, l, r) for(register int i = r; i >= l; --i)using namespace std;using namespace __gnu_pbds;typedef double db;typedef unsigned long long ull;typedef long long ll;bool Begin;const int N = 51, M = N * N;inline ll read(){ll x = 0, f = 1;char c = getchar();while(c < '0' || c > '9'){if(c == '-')f = -1;c = getchar();}while(c >= '0' && c <= '9'){x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return x * f;}inline void write(ll x){if(x < 0){putchar('-');x = -x;}if(x > 9)write(x / 10);putchar(x % 10 + '0');}int n, m, s1, s2, ans;int id[N][N];int a[M];bool f[M];char s[N][N];int dx[] = {0, 0, 1, - 1}, dy[] = {1, -1, 0, 0};vector<int> E[M];inline void add(int u, int v){E[u].push_back(v);}inline bool dfs(int u){for(auto v : E[u]){if(f[v])continue;f[v] = 1;if(!a[v] || dfs(a[v])){a[v] = u;return 1;}}return 0;}inline void Match(){for(int i = 1; i <= n * m; ++i){for(int j = 1; j <= n * m; ++j)f[j] = 0;if(dfs(i))ans++;}}bool End;int main(){n = read(), m = read();for(int i = 1; i <= n; ++i){scanf("%s", s[i] + 1);for(int j = 1; j <= m; ++j)id[i][j] = (i - 1) * m + j;}for(int i = 1; i <= n; ++i){for(int j = 1; j <= m; ++j){s1 += (s[i][j] == 'w'), s2 += (s[i][j] == 'b');if(s[i][j] != 'w')continue;for(int k = 0; k < 4; ++k){int zx = i + dx[k], zy = j + dy[k];if(zx < 1 || zx > n || zy < 1 || zy > m)continue;if(s[zx][zy] != 'b')continue;add(id[i][j], id[zx][zy]);}}}Match();s1 -= ans, s2 -= ans;write(ans * 100 + min(s1, s2) * 10 + max(s1, s2) - min(s1, s2));cerr << '\n' << abs(&Begin - &End) / 1048576 << "MB";return 0;}