#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;
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=1e15;
priority_queue<pii,vec(pii),greater<pii>> pq;
vi dp(h*w,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});
}
}
}
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,w);
rep(dir,4){
int ni=i,nj=j,_=0;
while(1){
ni+=di[dir],nj+=dj[dir];
if(!ok(ni,nj)){
break;
}
if(!_ and a[ni][nj]!='#'){
// print(ni,nj);
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=dp[get_id(i,j)];
}
}
}
if(ans>=inf){
cout<<"nemoguce\n";
}else{
cout<<ans<<"\n";
}
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Incorrect |
0 ms |
212 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
0 ms |
212 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
0 ms |
212 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
28 ms |
852 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
184 ms |
1908 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
581 ms |
3772 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
1084 ms |
6372 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
1083 ms |
6696 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |