Submission #1046858

#TimeUsernameProblemLanguageResultExecution timeMemory
10468581L1YAMaze (JOI23_ho_t3)C++17
100 / 100
420 ms119396 KiB
#include <bits/stdc++.h> using namespace std; typedef long long int ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; typedef long double ld; #define F first #define S second #define pb push_back #define endl '\n' #define Mp make_pair #define all(x) x.begin(), x.end() #define debug(x) cerr << #x << " = " << x << endl; #define fast_io ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define file_io freopen("tests.in" , "r" , stdin) ; ll mod = 1e9+7; const ll INF=1e9+23; vector<vector<ll> > dist; int n, m; int k; pii st, ft; int dx[]={1, -1, 0, 0}; int dy[]={0, 0, 1, -1}; vector<string> a; int main() { fast_io cin>>n>>m>>k; dist.resize(n, vector<ll>(m, INF)); k--; cin>>ft.F>>ft.S>>st.F>>st.S; ft.F--; ft.S--; st.F--; st.S--; for (int i=0; i<n; i++){ string s; cin>>s; a.pb(s); } queue<pair<pll, pll> > q, qq; dist[ft.F][ft.S]=0; q.push({ft, {0, 0}}); while(!q.empty() || !qq.empty()){ while(!q.empty()){ auto pp=q.front(); q.pop(); auto v=pp.F; for (int i=0; i<4; i++){ pii u=v; u.F+=dx[i]; u.S+=dy[i]; if(u.F>=0 && u.F<n && u.S>=0 && u.S<m){ if(a[u.F][u.S]=='.' && dist[u.F][u.S]>dist[v.F][v.S]){ dist[u.F][u.S]=dist[v.F][v.S]; q.push({u, {0, 0}}); } if(a[u.F][u.S]=='#' && dist[u.F][u.S]>dist[v.F][v.S]+1){ dist[u.F][u.S]=dist[v.F][v.S]+1; qq.push({u, {k, k}}); } } } } while(!qq.empty()){ auto pp=qq.front(); auto v=pp.F; qq.pop(); if(pp.S.F==0 || pp.S.S==0){ q.push({v, {0, 0}}); } for (int i=0; i<4; i++){ pii u=v; u.F+=dx[i]; u.S+=dy[i]; pii temp=pp.S; temp.F-=abs(dx[i]); temp.S-=abs(dy[i]); if(temp.F<0 || temp.S<0) continue; if(u.F>=0 && u.F<n && u.S>=0 && u.S<m){ if(dist[u.F][u.S]>dist[v.F][v.S]){ dist[u.F][u.S]=dist[v.F][v.S]; qq.push({u, temp}); } } } } } cout<<dist[st.F][st.S]<<endl; } /* if(dist[u.F][u.S]>dist[v.F][v.S]){ dist[u.F][u.S]=dist[v.F][v.S]; q.push_front({u, temp}); } */
#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...