#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2")
#define int long long
#define pii pair<int,int>
#define vi vector<int>
#define ff first
#define ss second
#define sp << " " <<
#define all(x) x.begin(),x.end()
#define big(x) ((int)(x.size()))
using namespace std;
const int MOD = 1e9+7, LIM = 1e6+1, inf = 2e18;
const int N = 1e5+1;
void solve() {
int n,m,k;
cin >> n >> m >> k;
pii start,targ;
cin >> start.ff >> start.ss;
cin >> targ.ff >> targ.ss;
start.ff--,start.ss--;
targ.ff--,targ.ss--;
vector<string> grid(n);
for (auto& row : grid) cin >> row;
queue<pii> q1;
queue<pair<pii,pii>> q2;
q1.push(start);
vector<vi> dist(n,vi(m,inf));
dist[start.ff][start.ss] = 0;
vi dx = {1,0,-1,0},dy = {0,1,0,-1};
auto cool = [&](int x,int y) -> bool {
if (x >= n || x < 0) return 0;
if (y >= m || y < 0) return 0;
return 1;
};
while (!q1.empty()) {
while (!q1.empty()) {
auto [x,y] = q1.front();
q1.pop();
for (int i = 0;i<4;i++) {
int gx = x+dx[i],gy = y+dy[i];
if (!cool(gx,gy)) continue;
if (dist[gx][gy] != inf) continue;
if (grid[gx][gy] == '#') {
dist[gx][gy] = dist[x][y]+1;
q2.push({{gx,gy},{1,1}});
}
else {
dist[gx][gy] = dist[x][y];
q1.push({gx,gy});
}
}
}
while (!q2.empty()) {
auto [cell,mv] = q2.front();
q2.pop();
auto [x,y] = cell;
q1.push({x,y});
auto [rx,ry] = mv;
for (int i = 0;i<4;i++) {
int gx = x+dx[i],gy = y+dy[i];
int rrx = rx+abs(dx[i]),rry = ry+abs(dy[i]);
if (!cool(gx,gy)) continue;
if (dist[gx][gy] != inf) continue;
if (rrx > k || rry > k) continue;
dist[gx][gy] = dist[x][y];
q2.push({{gx,gy},{rrx,rry}});
}
}
}
cout << dist[targ.ff][targ.ss] << '\n';
}
signed main() {
ios_base::sync_with_stdio(0); cin.tie(0);
int t = 1;
//cin >> t;
while (t --> 0) 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... |