Problem p02644 (C++) — buggy submission, verdict: Time Limit Exceeded

#define _DEBUG
#include "bits/stdc++.h"
#define CHOOSE(a) CHOOSE2 a
#define CHOOSE2(a0, a1, a2, a3, a4, x, ...) x
#define debug_1(x1) cout << #x1 << ": " << x1 << endl
#define debug_2(x1, x2)                                                        \\
  cout << #x1 << ": " << x1 << ", " #x2 << ": " << x2 << endl
#define debug_3(x1, x2, x3)                                                    \\
  cout << #x1 << ": " << x1 << ", " #x2 << ": " << x2 << ", " #x3 << ": "      \\
       << x3 << endl
#define debug_4(x1, x2, x3, x4)                                                \\
  cout << #x1 << ": " << x1 << ", " #x2 << ": " << x2 << ", " #x3 << ": "      \\
       << x3 << ", " #x4 << ": " << x4 << endl
#define debug_5(x1, x2, x3, x4, x5)                                            \\
  cout << #x1 << ": " << x1 << ", " #x2 << ": " << x2 << ", " #x3 << ": "      \\
       << x3 << ", " #x4 << ": " << x4 << ", " #x5 << ": " << x5 << endl
#ifdef _DEBUG
#define debug(...)                                                             \\
  CHOOSE((__VA_ARGS__, debug_5, debug_4, debug_3, debug_2, debug_1, ~))        \\
  (__VA_ARGS__)
#else
#define debug(...)
#endif
#define rep(index, num) for (int index = 0; index < (int)num; index++)
#define rep1(index, num) for (int index = 1; index <= (int)num; index++)
#define brep(index, num) for (int index = (int)num - 1; index >= 0; index--)
#define brep1(index, num) for (int index = (int)num; index > 0; index--)
#define scan(argument) cin >> argument
#define prin(argument) cout << argument << endl
#define kaigyo cout << endl
#define eps 1e-7
#define mp(a1, a2) make_pair(a1, a2)
#define ALL(a) (a).begin(), (a).end()
#define rALL(a) (a).rbegin(), (a).rend()
typedef long long ll;
typedef long double ld;
using namespace std;
typedef pair<ll, ll> pll;
typedef pair<int, int> pint;
typedef vector<int> vint;
typedef vector<ll> vll;
typedef vector<pint> vpint;
typedef vector<pll> vpll;
ll INFl = (ll)1e+18 + 1;
int INF = 1e+9 + 1;
int dp[4][2] = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};
int main() {
  int H, W, K;
  int x0, y0, x1, y1;
  scan(H >> W >> K);
  char c[H + 2][W + 4];
  int dismin[H + 2][W + 4];
  fill(dismin[0], dismin[H + 2], INF);
  scan(y0 >> x0 >> y1 >> x1);
  rep1(i, H) { scanf("%s", c[i] + 1); }
  rep(j, W + 2) {
    c[0][j] = '@';
    c[H + 1][j] = '@';
  }
  rep(i, H + 2) {
    c[i][0] = '@';
    c[i][W + 1] = '@';
  } /*
   rep(i,H+2){
           rep(j,W+2){
                   printf("%c",c[i][j]);
           }
           kaigyo;
   }*/
  vector<pair<pint, vint>> record;
  vint ve;
  rep(i, 4) ve.push_back(1);
  record.push_back({{y0, x0}, ve});
  dismin[y0][x0] = 0;
  int count = 1;
  while (!record.empty()) {
    vector<pair<pint, vint>> before = record;
    record.clear();
    rep(i, before.size()) {
      pint to = before[i].first;
      vint ve = before[i].second;
      rep(j, 4) {
        if (ve[j] == 0)
          continue;
        rep1(k, K) {
          int y = to.first + dp[j][1] * k;
          int x = to.second + dp[j][0] * k;
          if (c[y][x] == '@')
            break;
          if (y == y1 && x == x1) {
            prin(count);
            return 0;
          }
          if (count < dismin[y][x]) {
            vint ve(4);
            rep(s, 4) ve[s] = 1;
            ve[(j + 2) % 4] = 0;
            if (k != K)
              ve[j] = 0;
            record.push_back({{y, x}, ve});
            dismin[y][x] = count;
          }
        }
      }
    }
    count++; /*
     rep(i,H+2){
             rep(j,W+2){
                     if(dismin[i][j]==INF) printf("-");
                     else printf("%d",dismin[i][j]);
             }
             kaigyo;
     }*/
  }
  prin(-1);
  return 0;
}


Error: TLE

Fixed submission:

#define _DEBUG
#include "bits/stdc++.h"
#define CHOOSE(a) CHOOSE2 a
#define CHOOSE2(a0, a1, a2, a3, a4, x, ...) x
#define debug_1(x1) cout << #x1 << ": " << x1 << endl
#define debug_2(x1, x2)                                                        \\
  cout << #x1 << ": " << x1 << ", " #x2 << ": " << x2 << endl
#define debug_3(x1, x2, x3)                                                    \\
  cout << #x1 << ": " << x1 << ", " #x2 << ": " << x2 << ", " #x3 << ": "      \\
       << x3 << endl
#define debug_4(x1, x2, x3, x4)                                                \\
  cout << #x1 << ": " << x1 << ", " #x2 << ": " << x2 << ", " #x3 << ": "      \\
       << x3 << ", " #x4 << ": " << x4 << endl
#define debug_5(x1, x2, x3, x4, x5)                                            \\
  cout << #x1 << ": " << x1 << ", " #x2 << ": " << x2 << ", " #x3 << ": "      \\
       << x3 << ", " #x4 << ": " << x4 << ", " #x5 << ": " << x5 << endl
#ifdef _DEBUG
#define debug(...)                                                             \\
  CHOOSE((__VA_ARGS__, debug_5, debug_4, debug_3, debug_2, debug_1, ~))        \\
  (__VA_ARGS__)
#else
#define debug(...)
#endif
#define rep(index, num) for (int index = 0; index < (int)num; index++)
#define rep1(index, num) for (int index = 1; index <= (int)num; index++)
#define brep(index, num) for (int index = (int)num - 1; index >= 0; index--)
#define brep1(index, num) for (int index = (int)num; index > 0; index--)
#define scan(argument) cin >> argument
#define prin(argument) cout << argument << endl
#define kaigyo cout << endl
#define eps 1e-7
#define mp(a1, a2) make_pair(a1, a2)
#define ALL(a) (a).begin(), (a).end()
#define rALL(a) (a).rbegin(), (a).rend()
typedef long long ll;
typedef long double ld;
using namespace std;
typedef pair<ll, ll> pll;
typedef pair<int, int> pint;
typedef vector<int> vint;
typedef vector<ll> vll;
typedef vector<pint> vpint;
typedef vector<pll> vpll;
ll INFl = (ll)1e+18 + 1;
int INF = 1e+9 + 1;
int dp[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
int main() {
  int H, W, K;
  int x0, y0, x1, y1;
  scan(H >> W >> K);
  char c[H + 2][W + 4];
  int dismin[H + 2][W + 4];
  fill(dismin[0], dismin[H + 2], INF);
  scan(y0 >> x0 >> y1 >> x1);
  rep1(i, H) { scanf("%s", c[i] + 1); }
  rep(j, W + 2) {
    c[0][j] = '@';
    c[H + 1][j] = '@';
  }
  rep(i, H + 2) {
    c[i][0] = '@';
    c[i][W + 1] = '@';
  } /*
   rep(i,H+2){
           rep(j,W+2){
                   printf("%c",c[i][j]);
           }
           kaigyo;
   }*/
  vpint record;
  record.push_back({y0, x0});
  dismin[y0][x0] = 0;
  int count = 1;
  while (!record.empty()) {
    vpint before = record;
    record.clear();
    rep(i, before.size()) {
      pint to = before[i];
      rep(j, 4) {
        rep1(k, K) {
          int y = to.first + dp[j][1] * k;
          int x = to.second + dp[j][0] * k;
          if (c[y][x] == '@')
            break;
          if (y == y1 && x == x1) {
            prin(count);
            return 0;
          }
          if (count < dismin[y][x]) {
            record.push_back({y, x});
            dismin[y][x] = count;
          }
        }
      }
    }
    count++; /*
     rep(i,H+2){
             rep(j,W+2){
                     if(dismin[i][j]==INF) printf("-");
                     else printf("%d",dismin[i][j]);
             }
             kaigyo;
     }*/
  }
  prin(-1);
  return 0;
}