제출 #955160

#제출 시각아이디문제언어결과실행 시간메모리
955160OtalpMaze (JOI23_ho_t3)C++14
27 / 100
2158 ms1457444 KiB
#include<bits/stdc++.h> using namespace std; #define pb push_back #define pii pair<int, int> #define ff first #define ss second vector<vector<int> > a, dp, us; void solve(){ int n, m, k; cin>>n>>m>>k; pii s, t; cin>>s.ff>>s.ss; cin>>t.ff>>t.ss; for(int i=0; i<=n + 2; i++){ us.pb({}); dp.pb({}); a.pb({}); for(int j=0; j<=m + 2; j++){ dp[i].pb(0); us[i].pb(0); a[i].pb(0); } } for(int i=1; i<=n; i++){ for(int j=1; j<=m; j++){ char c; cin>>c; if(c == '#') a[i][j] = 1; else a[i][j] = 0; } } vector<pii> nap = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}}; deque<pair<pii, int>> h; h.pb({s, 0}); while(h.size()){ int x=h[0].ff.ff, y=h[0].ff.ss; if(us[x][y]){ h.pop_front(); continue; } dp[x][y] = h[0].ss; us[x][y] = 1; h.pop_front(); for(pii d: nap){ if(!us[x + d.ff][y + d.ss] and x + d.ff <= n and x + d.ff >= 1 and y + d.ss <= m and y + d.ss >= 1 and a[x + d.ff][y + d.ss] != 1){ h.push_front({{x + d.ff, y + d.ss}, dp[x][y]}); continue; } } for(int i=max(1, x - k); i<=min(n, x + k); i++){ for(int j=max(1, y-k); j<=min(m, y + k); j++){ if(!us[i][j] and !(abs(j - y) == k and abs(x - i) == k)){ h.pb({{i, j}, dp[x][y] + 1}); } } } } for(int i=1; i<=n; i++){ for(int j=1; j<=m; j++){ //cout<<dp[i][j]<<' '; } //cout<<'\n'; } cout<<dp[t.ff][t.ss]; } int main(){ 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...