#include <bits/stdc++.h>
using namespace std;
#define int ll
#define rep(i,n) for(int i=0;i<n;i++)
#define per(i,n) for(int i=n-1;i>=0;i--)
#define rng(i,c,n) for(int i=c;i<n;i++)
#define fi first
#define se second
#define pb push_back
#define sz(a) (int)a.size()
#define vec(...) vector<__VA_ARGS__>
#define _3dSgv16 ios::sync_with_stdio(0),cin.tie(0)
typedef long long ll;
using pii=pair<int,int>;
using vi=vector<int>;
void print(){cout<<'\n';}
template<class h,class...t>
void print(const h&v,const t&...u){cout<<v<<' ',print(u...);}
// e
signed main(){
_3dSgv16;
int h,w;
cin>>h>>w;
const int n=h*w;
vec(string) a(h);
rep(i,h){
cin>>a[i];
}
auto get_id=[&](int x,int y)->int{
return x*w+y;
};
auto get_pnt=[&](int id)->pii{
return {id/w,id%w};
};
const int inf=1e9;
priority_queue<pii,vec(pii),greater<pii>> pq;
vi dp(n,inf);
rep(i,h){
rep(j,w){
if(a[i][j]=='C'){
int id=get_id(i,j);
dp[id]=0;
pq.push({0,id});
break;
}
}
}
auto ok=[&](int x,int y)->bool{
return min(x,y)>=0 and x<h and y<w;
};
auto push=[&](int id,int w){
if(dp[id]>w){
dp[id]=w;
pq.push({w,id});
}
};
const int di[]={1,-1,0,0};
const int dj[]={0,0,1,-1};
while(sz(pq)){
auto top=pq.top();
pq.pop();
if(dp[top.se]!=top.fi) continue;
auto v=get_pnt(top.se);
int i=v.fi,j=v.se;
int w=top.fi;
// print(i,j,t,w);
rep(dir,4){
int ni=i,nj=j;
rep(_,max(h,w)+1){
ni+=di[dir],nj+=dj[dir];
if(!ok(ni,nj) or a[ni][nj]=='#'){
break;
}
if(!_){
int nid=get_id(ni,nj);
push(nid,w+1);
}
int nni=ni+di[dir],nnj=nj+dj[dir];
if(ok(nni,nnj) and a[nni][nnj]=='#'){
int nid=get_id(ni,nj);
push(nid,w+1);
}
}
}
}
int ans=inf;
rep(i,h){
rep(j,w){
if(a[i][j]=='F'){
ans=min(dp[get_id(i,j)],dp[get_id(i,j)]);
}
}
}
print(ans>=inf?"nemoguce":to_string(ans));
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
0 ms |
212 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
4 ms |
468 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
9 ms |
852 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
25 ms |
1844 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
39 ms |
2328 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
47 ms |
2672 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |