Submission #1263572

#TimeUsernameProblemLanguageResultExecution timeMemory
1263572denislavMaze (JOI23_ho_t3)C++20
100 / 100
544 ms370272 KiB
# include <iostream> # include <vector> # include <queue> using namespace std; const int MAX=6e6+11,INF=1e9; int n,m,K; pair<int,int> S,T; vector<char> tab[MAX]; vector<int> dist[MAX]; int adj[4][2]={{1,0},{0,1},{-1,0},{0,-1}}; bool in(int x, int y) { return x>=1 and x<=n and y>=1 and y<=m; } int main() { ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin>>n>>m>>K; for(int i=0;i<=n+1;i++) { tab[i].resize(m+2,'.'); dist[i].resize(m+2,INF); } cin>>S.first>>S.second; cin>>T.first>>T.second; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) cin>>tab[i][j]; } queue<pair<int,int>> q1; dist[S.first][S.second]=0; q1.push(S); while(q1.size()>0) { queue<pair<pair<int,int>,pair<int,int>>> q2; while(q1.size()>0) { int x=q1.front().first,y=q1.front().second; q1.pop(); //cout<<"->"<<x<<" "<<y<<"\n"; for(int i=0;i<4;i++) { int x2=x+adj[i][0]; int y2=y+adj[i][1]; if(!in(x2,y2)) continue; if(tab[x2][y2]=='#') { if(dist[x2][y2]==INF) { dist[x2][y2]=dist[x][y]+1; q2.push({{x2,y2},{1,1}}); } } else { if(dist[x2][y2]==INF) { dist[x2][y2]=dist[x][y]; q1.push({x2,y2}); } } } } while(q2.size()>0) { int x=q2.front().first.first,y=q2.front().first.second; int hor=q2.front().second.first,ver=q2.front().second.second; q2.pop(); q1.push({x,y}); for(int i=0;i<4;i++) { int x2=x+adj[i][0]; int y2=y+adj[i][1]; int hor2=hor+abs(adj[i][0]); int ver2=ver+abs(adj[i][1]); if(!in(x2,y2) or hor2>K or ver2>K) continue; if(dist[x2][y2]==INF) { dist[x2][y2]=dist[x][y]; q2.push({{x2,y2},{hor2,ver2}}); } } } } cout<<dist[T.first][T.second]<<"\n"; return 0; }
#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...