Submission #646504

#TimeUsernameProblemLanguageResultExecution timeMemory
646504inksamuraiPortal (COCI17_portal)C++17
96 / 120
49 ms2612 KiB
#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; assert(a[i][j]!='#'); int w=top.fi; bool pok=0; rep(dir,4){ int ni=i+di[dir],nj=j+dj[dir]; pok=pok or (ok(ni,nj) and a[ni][nj]=='#'); } rep(dir,4){ int ni=i,nj=j,_=0; while(1){ ni+=di[dir],nj+=dj[dir]; if(!ok(ni,nj) or a[ni][nj]=='#'){ break; } if(!_){ // 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]=='#' and pok){ 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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...