Submission #1153147

#TimeUsernameProblemLanguageResultExecution timeMemory
1153147mertbbmMaze (JOI23_ho_t3)C++20
19 / 100
5 ms4676 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define ld long double #define show(x,y) cout << y << " " << #x << endl; #define show2(x,y,i,j) cout << y << " " << #x << " " << j << " " << #i << endl; #define show3(x,y,i,j,p,q) cout << y << " " << #x << " " << j << " " << #i << " " << q << " " << #p << endl; #define show4(x,y) for(auto it:y) cout << it << " "; cout << #x << endl; typedef pair<int,int>pii; typedef pair<pii,int>pi2; mt19937_64 rng(chrono::system_clock::now().time_since_epoch().count()); void solve(){ int n,m,k; cin >> n >> m >> k; pii st; pii ed; cin >> st.first >> st.second >> ed.first >> ed.second; st.first--; st.second--; ed.first--; ed.second--; string arr[n]; for(int x=0;x<n;x++){ cin >> arr[x]; } pii dir[8]={ {1,0}, {-1,0}, {0,1}, {0,-1}, {1,1}, {-1,-1}, {1,-1}, {-1,1}, }; int dist[n+5][m+5]; int ans[n+5][m+5]; memset(dist,-1,sizeof(dist)); memset(ans,-1,sizeof(ans)); vector<pii>black; vector<pii>white; white.push_back(st); for(int x=0;x<max(n,m)+1;x++){ //bfs out if(x>0){ queue<pii>q; for(auto it:black){ if(ans[it.first][it.second]!=-1) continue; q.push(it); dist[it.first][it.second]=0; } black.clear(); while(!q.empty()){ pii cur=q.front(); q.pop(); if(ans[cur.first][cur.second]!=-1) continue; ans[cur.first][cur.second]=x; for(auto it:dir){ int nx=cur.first+it.first; int ny=cur.second+it.second; int nd=dist[cur.first][cur.second]+1; if(nx<0||ny<0||nx>=n||ny>=m) continue; if(dist[nx][ny]!=-1&&dist[nx][ny]<=nd) continue; if(arr[nx][ny]=='.'){ if(abs(it.first)+abs(it.second)==1)white.push_back({nx,ny}); continue; } else if(nd>=k){ if(abs(it.first)+abs(it.second)==1)black.push_back({nx,ny}); continue; } dist[nx][ny]=nd; q.push({nx,ny}); } } } //white { queue<pii>q; for(auto it:white){ if(ans[it.first][it.second]!=-1) continue; q.push(it); } white.clear(); while(!q.empty()){ pii cur=q.front(); q.pop(); if(ans[cur.first][cur.second]!=-1) continue; ans[cur.first][cur.second]=x; for(auto it:dir){ if(abs(it.first)+abs(it.second)!=1) continue; int nx=cur.first+it.first; int ny=cur.second+it.second; if(nx<0||ny<0||nx>=n||ny>=m) continue; if(ans[nx][ny]!=-1) continue; if(arr[nx][ny]=='.'){ q.push({nx,ny}); } else{ black.push_back({nx,ny}); } } } } } cout << ans[ed.first][ed.second] << "\n"; } int32_t main(){ ios::sync_with_stdio(0); cin.tie(0); //freopen("in.txt","r",stdin); //freopen("in.txt","w",stdout); int t=1; //cin >> t; while(t--){ solve(); } }
#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...