Submission #1265537

#TimeUsernameProblemLanguageResultExecution timeMemory
1265537syanvuMaze (JOI23_ho_t3)C++20
0 / 100
2194 ms1999072 KiB
#include <bits/stdc++.h> // #include <ext/pb_ds/assoc_container.hpp> // #include <ext/pb_ds/tree_policy.hpp> #define SS ios_base::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr); #pragma optimize("g", on) #pragma GCC optimize("03") #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,avx2,mmx,fma,avx,tune=native") #define int long long #define all(x) x.begin(),x.end() #define F first #define S second using namespace std; // using namespace __gnu_pbds; // #define ordered_set tree<int,null_type,less_equal<int>,rb_tree_tag,tree_order_statistics_node_update> const int LG = 20,N = 2e5+1,inf = 1e18,MOD = 998244353; const double eps = 1e-9; int T; void solve() { int r,c,n; cin>>r>>c>>n; int sr,sc; cin>>sr>>sc; int gr,gc; cin>>gr>>gc; char s[r+1][c+1]; for(int i=1;i<=r;i++){ for(int j=1;j<=c;j++){ cin>>s[i][j]; } } vector<vector<int>> used(r+1,vector<int>(c+1,0ll)); vector<vector<pair<int,int>>> dist(r+1,vector<pair<int,int>>(c+1,{inf,inf})); queue<pair<int,int>> q; int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0}; auto in = [&](int x,int y){ return (x>=1 && x<=r && y>=1 && y<=c); }; q.push({sr,sc}); int ans=0; while(!used[gr][gc]){ queue<pair<int,int>> nq; vector<pair<int,int>> z; while(q.size()){ auto [x,y] = q.front(); q.pop(); used[x][y]=1; z.push_back({x,y}); if(s[x][y]=='#') continue; for(int i=0;i<4;i++){ int nx=dx[i]+x,ny=dy[i]+y; if(!in(nx,ny) || used[nx][ny] || s[nx][ny]=='#') continue; q.push({nx,ny}); } } if(used[gr][gc]) break; for(auto [x,y]:z){ for(int i=0;i<4;i++){ int nx=dx[i]+x,ny=dy[i]+y; if(!in(nx,ny) || used[nx][ny] || s[nx][ny]=='.') continue; nq.push({nx,ny}); dist[nx][ny]={1,1}; used[nx][ny]=1; } } while(nq.size()){ auto [x,y] = nq.front(); s[x][y]='.'; used[x][y]=1; nq.pop(); q.push({x,y}); for(int i=0;i<4;i++){ int nx=dx[i]+x,ny=dy[i]+y; int ndx=dist[x][y].F+abs(dx[i]); int ndy=dist[x][y].S+abs(dy[i]); if(!in(nx,ny) || used[nx][ny] || ndx>n || ndy>n) continue; dist[nx][ny]={ndx,ndy}; nq.push({nx,ny}); } } ans++; } cout<<ans; return; } signed main() { // freopen("deleg.in","r",stdin); // freopen("deleg.out","w",stdout); SS int t = 1; if (T) { 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...