#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 = 17,N = 2e5+1,inf = 1e9,MOD = 1e9 + 7;
const double eps = 1e-9;
int T;
void solve() {
int r,c,n;
cin>>r>>c>>n;
string s[r];
int sx,sy,fx,fy;
cin>>sx>>sy>>fx>>fy;
sx--,sy--,fx--,fy--;
for(int i=0;i<r;i++) cin>>s[i];
priority_queue<array<int,4>,vector<array<int,4>>,greater<array<int,4>>> pq;
int used[r][c]={};
pair<int,int> dp[r][c];
for(int i=0;i<r;i++){
for(int j=0;j<c;j++) dp[i][j] = {inf,0};
}
dp[sx][sy]={0,0};
pq.push({0,0,sx,sy});
int dx[8]={0,0,1,-1,1,-1,1,-1},dy[8]={1,-1,0,0,1,1,-1,-1};
while(pq.size()){
auto [musor,govno,x,y] = pq.top();
pq.pop();
used[x][y]=1;
for(int i=0;i<8;i++){
int tox=dx[i] + x, toy=dy[i] + y;
if(min(tox,toy)<0 || tox>=r || toy>=c) continue;
if(dp[x][y].S == 0){
if(i>=4) continue;
if(s[tox][toy] == '.'){
if(dp[tox][toy].F > dp[x][y].F){
dp[tox][toy] = {dp[x][y].F, 0};
if(!used[tox][toy]) pq.push({dp[tox][toy].F,-dp[tox][toy].S,tox,toy});
used[tox][toy]=1;
}
}
else{
if(dp[tox][toy].F >= dp[x][y].F + 1){
dp[tox][toy] = {dp[x][y].F + 1, n-1};
if(!used[tox][toy]) pq.push({dp[tox][toy].F,-dp[tox][toy].S,tox,toy});
used[tox][toy]=1;
}
}
}
else if(dp[x][y].S > 0){
if(dp[tox][toy].F > dp[x][y].F){
dp[tox][toy] = {dp[x][y].F, dp[x][y].S-1};
if(!used[tox][toy]) pq.push({dp[tox][toy].F,-dp[tox][toy].S,tox,toy});
used[tox][toy]=1;
}
else if(dp[tox][toy].F == dp[x][y].F && dp[tox][toy].S < dp[x][y].S - 1){
dp[tox][toy] = {dp[x][y].F, dp[x][y].S-1};
if(!used[tox][toy]) pq.push({dp[tox][toy].F,-dp[tox][toy].S,tox,toy});
used[tox][toy]=1;
}
}
}
}
cout<<dp[fx][fy].F;
}
signed main() {
SS
int t = 1;
if (T) {
cin >> t;
}
while (t--) {
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... |