이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |