Submission #675238

#TimeUsernameProblemLanguageResultExecution timeMemory
675238vjudge1Portals (BOI14_portals)C++17
100 / 100
318 ms42008 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const int maxN = 1001; int dx[]={-1,1,0,0}; int dy[]={0,0,-1,1}; int r,c; #define fi first #define se second string s[maxN]; ll d[maxN][maxN]; bool vis[maxN][maxN]; #define pli pair<int,int> #define plii pair<ll,pli> pli ed; pli nxt[4][maxN][maxN]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> r >> c; priority_queue<plii,vector<plii>,greater<plii>>pq; for(int i=0;i<r;i++) { cin >> s[i]; for(int j=0;j<c;j++) { d[i][j]=r*c+10; vis[i][j]=false; if(s[i][j]=='S') { pq.push({0,{i,j}}); d[i][j]=0; } else if(s[i][j]=='C') { ed={i,j}; } } } for(int i=0;i<r;i++) { int l=0; for(int j=0;j<c;j++) { nxt[0][i][j]={i,l}; if(s[i][j]=='#') l=j+1; } l=c-1; for(int j=c-1;j>=0;j--) { nxt[1][i][j]={i,l}; if(s[i][j]=='#') l=j-1; } } for(int j=0;j<c;j++) { int u=0; for(int i=0;i<r;i++) { nxt[2][i][j]={u,j}; if(s[i][j]=='#') u=i+1; } u=r-1; for(int i=r-1;i>=0;i--) { nxt[3][i][j]={u,j}; if(s[i][j]=='#') u=i-1; } } while(!pq.empty()) { auto v=pq.top(); pq.pop(); int x=v.se.fi; int y=v.se.se; if(vis[x][y]) continue; if(s[x][y]=='#') continue; vis[x][y]=true; for(int i=0;i<4;i++) { int newx=x+dx[i]; int newy=y+dy[i]; if(newx<0||newy<0||newx>=r||newy>=c) continue; if(s[newx][newy]!='#') if(d[newx][newy]>d[x][y]+1) d[newx][newy]=min(d[newx][newy],d[x][y]+1),pq.push({d[newx][newy],{newx,newy}}); } for(int i=0;i<4;i++) { for(int j=0;j<4;j++) { if(i==j) continue; int w=abs(nxt[j][x][y].fi-x)+abs(nxt[j][x][y].se-y)+1; int newx=nxt[i][x][y].fi; int newy=nxt[i][x][y].se; if(d[newx][newy]>d[x][y]+w) { d[newx][newy]=d[x][y]+w; pq.push({d[newx][newy],{newx,newy}}); } } } } cout << d[ed.fi][ed.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...