結果
| 問題 |
No.157 2つの空洞
|
| コンテスト | |
| ユーザー |
dnish
|
| 提出日時 | 2017-05-04 12:31:01 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 3 ms / 2,000 ms |
| コード長 | 1,041 bytes |
| コンパイル時間 | 1,788 ms |
| コンパイル使用メモリ | 175,188 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-09-14 07:02:56 |
| 合計ジャッジ時間 | 2,670 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 16 |
ソースコード
#include <bits/stdc++.h>
#define REP(i,n,N) for(int i=(n);i<(int)N;i++)
#define p(s) cout<<(s)<<endl
#define ck(n,a,b) ((a)<=(n)&&(n)<(b))
#define F first
#define S second
using namespace std;
const int inf=1e9;
int dx[]={1,0,-1,0};
int dy[]={0,1,0,-1};
bool visit[20][20];
int main(){
int w,h;
cin>>w>>h;
string field[21];
REP(i,0,h) cin>>field[i];
stack<pair<int,int>> st;
vector<pair<int,int>> vt[2];
int v=0;
REP(i,1,h-1){
REP(j,1,w-1){
if(field[i][j]=='.'&&!visit[i][j]){
st.push({i,j});
vt[v].push_back({i,j});
visit[i][j]=true;
while(!st.empty()){
pair<int,int> now=st.top();st.pop();
REP(i,0,4){
int ny=now.F+dy[i],nx=now.S+dx[i];
if(field[ny][nx]=='#') continue;
if(visit[ny][nx]) continue;
visit[ny][nx]=true;
vt[v].push_back({ny,nx});
st.push({ny,nx});
}
}
v++;
}
}
if(v==2) break;
}
int ans=inf;
for(auto a : vt[0]){
for(auto b :vt[1]){
int x= abs(b.F-a.F),y=abs(b.S-a.S);
ans=min(ans,x+y-1);
}
}
p(ans);
return 0;
}
dnish