제출 #646489

#제출 시각아이디문제언어결과실행 시간메모리
646489inksamuraiPortal (COCI17_portal)C++17
48 / 120
73 ms2896 KiB
#include <bits/stdc++.h> using namespace std; #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 using T=pair<pii,int>; 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 t)->int{ return x*w+y+t*n; }; auto get_pnt=[&](int id)->T{ int t=0; if(id>=n){ id-=n; t=1; } return {{id/w,id%w},t}; }; const int inf=1e9; priority_queue<pii,vec(pii),greater<pii>> pq; vi dp(2*n,inf); rep(i,h){ rep(j,w){ if(a[i][j]=='C'){ int id=get_id(i,j,0); 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.fi,j=v.fi.se,t=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,0); 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,1); push(nid,w+1); } } } } // print(dp[get_id(1,5,1)]); int ans=inf; rep(i,h){ rep(j,w){ if(a[i][j]=='F'){ ans=min(dp[get_id(i,j,0)],dp[get_id(i,j,1)]); } } } print(ans==inf?"nemoguce":to_string(ans)); }

컴파일 시 표준 에러 (stderr) 메시지

portal.cpp: In function 'int main()':
portal.cpp:78:27: warning: unused variable 't' [-Wunused-variable]
   78 |   int i=v.fi.fi,j=v.fi.se,t=v.se;
      |                           ^
#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...