結果
問題 |
No.421 しろくろチョコレート
|
ユーザー |
|
提出日時 | 2024-12-21 16:30:26 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 5 ms / 2,000 ms |
コード長 | 1,767 bytes |
コンパイル時間 | 2,149 ms |
コンパイル使用メモリ | 170,868 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-12-21 16:30:31 |
合計ジャッジ時間 | 3,658 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 65 |
ソースコード
#include <bits/stdc++.h> #define ll long long using namespace std; int n,m; int A[2500]; int B[2500]; vector<int>adj[2500]; bool vis[2500]; char f[50][50]; int dy[4]={-1,0,1,0}; int dx[4]={0,1,0,-1}; bool dfs(int a) { vis[a]=true; for(auto b:adj[a]) { if(B[b]==-1||!vis[B[b]]&&dfs(B[b])) { A[a]=b; B[b]=a; return true; } } return false; } int main() { // freopen("chocolate.in","r",stdin); // freopen("chocolate.out","w",stdout); cin.tie(0); ios::sync_with_stdio(false); cin>>n>>m; int cntw=0; int cntb=0; for (int i=0;i<n;i++) { for(int j=0;j<m;j++) { cin>>f[i][j]; if(f[i][j]=='w') cntw++; else if(f[i][j]=='b') cntb++; } } for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(f[i][j]=='b') { for(int k=0;k<4;k++) { int y=i+dy[k]; int x=j+dx[k]; if(y<0||y>=n||x<0||x>=m) continue; if(f[y][x]=='w') { adj[i*m+j].push_back(y*m+x); } } } } } int res=0; memset(A,-1,sizeof(A)); memset(B,-1,sizeof(B)); for(int i=0;i<n*m;i++) { if(adj[i].size()==0) continue; if(A[i]==-1) { memset(vis,false,sizeof(vis)); if(dfs(i)) { res+=100; cntw--; cntb--; } } } int x=min(cntw,cntb); res+=(10*x); cntw-=x; cntb-=x; res+=cntw; res+=cntb; cout<<res<<endl; return 0; }