Submission #916333

#TimeUsernameProblemLanguageResultExecution timeMemory
916333berrMaze (JOI23_ho_t3)C++17
100 / 100
1445 ms330832 KiB
#include <bits/stdc++.h> using namespace std; const int mod = 1e9+7; signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); int r, c, n; cin >> c>> r >> n; array<int, 2> s, g; cin >> s[0] >> s[1]; cin >> g[0] >> g[1]; s[0]--; s[1]--; g[0]--; g[1]--; vector a(c, vector(r, '0')); for(int i=0; i<c; i++){ for(int l=0; l<r; l++){ cin >> a[i][l]; } } int ans = 0; queue<array<int, 2>> q[2]; int pos = 0; q[0].push(s); queue<array<int, 3>> sinir; queue<array<int, 3>>sinir2; vector<array<int, 3>> pf; int of = 500; auto check =[&](int x, int y, int z){ if(x<0 || y<0) return 1; if(x>=c || y>=r) return 1; if(a[x][y]=='.'){ q[z%2].push({x, y}); return 1; } return 0; }; vector vis(c, vector(r, 0)); vector vis2(c, vector(r, 0)); vector vis3(c, vector(r, 0)); vector vis4(c, vector(r, 0)); int anss = -1; while(pos <r*c && anss==-1){ if(q[pos%2].size()==0 ){ pos++; while(sinir.size()){ auto [z, x, y] = sinir.front(); vis[x][y] = 0; if(z!=0) sinir2.push({n, x, y}); else pf.push_back({n-1, x, y}); q[pos%2].push({x, y}); sinir.pop(); //cout<<x<<" "<<y<<" "<<pos<<"\n"; if(z<=0) continue; if(y-1>=0&&!vis[x][y-1] && !vis2[x][y-1]){ a[x][y-1] = '.'; vis2[x][y-1] = 1; sinir.push({z-1, x, y-1}); } if(y+1<r&&!vis[x][y+1] && !vis2[x][y+1]){ a[x][y+1] = '.'; vis2[x][y+1] = 1; sinir.push({z-1, x, y+1}); } } while(pf.size()){ sinir2.push(pf.back()); pf.pop_back(); } //cout<<"\n"; while(sinir2.size()){ auto [z, x, y] = sinir2.front(); vis[x][y] = 0; sinir2.pop(); // cout<<z<<" "<<x<<" "<<y<<"\n"; if(z<=0) continue; if(x-1>=0&&!vis[x-1][y] && !vis2[x-1][y]){ a[x-1][y] = '.'; vis2[x-1][y] = 1; sinir2.push({z-1, x-1, y}); } if(x+1<c&&!vis[x+1][y] && !vis2[x+1][y]){ a[x+1][y] = '.'; vis2[x+1][y] = 1; sinir2.push({z-1, x+1, y}); } } } else{ while(q[pos%2].size()){ auto [x, y] = q[pos%2].front(); q[pos%2].pop(); int ans = 0; if(vis[x][y]) continue; vis[x][y] = 1; if(x==g[0] && y == g[1]&& anss==-1){ anss = pos; } ans += check(x-1, y, pos); ans += check(x+1, y, pos); ans += check(x, y-1, pos); ans += check(x, y+1, pos); if(ans!=4){ sinir.push({n, x, y}); } } } } cout << anss <<"\n"; }

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:29:9: warning: unused variable 'ans' [-Wunused-variable]
   29 |     int ans = 0;
      |         ^~~
Main.cpp:39:9: warning: unused variable 'of' [-Wunused-variable]
   39 |     int of = 500;
      |         ^~
#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...