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

#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
lli mod = 1000000007;
typedef pair<lli, pair<lli, lli>> ppi;
lli zero_x[] = {-1, 0, 1, 0};
lli zero_y[] = {0, -1, 0, 1};
lli one_x[] = {-2, -2, -2, -2, -2, -1, -1, -1, -1, -1, 0, 0,
               0,  0,  1,  1,  1,  1,  1,  2,  2,  2,  2, 2};
lli one_y[] = {-2, -1, 0,  1,  2, -2, -1, 0,  1,  2, -2, -1,
               1,  2,  -2, -1, 0, 1,  2,  -2, -1, 0, 1,  2};
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  lli h, w;
  cin >> h >> w;
  lli ch, cw, dh, dw;
  cin >> ch >> cw >> dh >> dw;
  string mat[h];
  for (lli i = 0; i < h; ++i)
    cin >> mat[i];
  priority_queue<ppi, vector<ppi>, greater<ppi>> q;
  q.push({0, {ch - 1, cw - 1}});
  lli vis[h][w];
  vis[ch - 1][cw - 1] = 1;
  lli cost[h][w];
  cost[ch - 1][cw - 1] = 0;
  for (lli i = 0; i < h; ++i)
    for (lli j = 0; j < w; ++j)
      cost[i][j] = LLONG_MAX;
  while (!q.empty()) {
    lli curr = q.top().first;
    lli r = q.top().second.first;
    lli c = q.top().second.second;
    // cout<<r<<" "<<c<<" "<<curr<<endl;
    q.pop();
    for (lli i = 0; i < 4; ++i) {
      lli next_r = r + zero_x[i];
      lli next_c = c + zero_y[i];
      if (next_r >= 0 && next_r < h && next_c >= 0 && next_c < w &&
          (cost[next_r][next_c] > curr) && mat[next_r][next_c] == '.') {
        cost[next_r][next_c] = curr;
        q.push({curr, {next_r, next_c}});
      }
    }
    for (lli i = 0; i < 24; ++i) {
      lli next_r = r + one_x[i];
      lli next_c = c + one_y[i];
      if (next_r >= 0 && next_r < h && next_c >= 0 && next_c < w &&
          (cost[next_r][next_c] > (curr + 1)) && mat[next_r][next_c] == '.') {
        cost[next_r][next_c] = curr + 1;
        q.push({curr + 1, {next_r, next_c}});
      }
    }
  }
  if (cost[dh - 1][dw - 1] == LLONG_MAX)
    cout << -1 << endl;
  else
    cout << cost[dh - 1][dw - 1] << endl;
}


Error: TLE

Fixed submission:

// //    ? WHY YOU OPEN THIS ?    //

// #include<bits/stdc++.h>
// using namespace std;
// #define int long long

// #define PAIR    pair<int,int>
// #define Vector  vector<int>
// #define MAP     map<int,int>
// #define pb      push_back
// #define mk      make_pair
// #define MOD     1e9+7
// #define all(a)  begin(a),end(a)
// #define F       first
// #define S       second

// #define FOR(i, a, b)     for(int i = a; i < b; i++)
// #define ROF(i, a, b)     for(int i = a; i>= b; i--)
// #define check(c)       cout<<#c<<" : "<<c<<endl;
// #define check2(a, b)    cout<<#a<<" : "<<a<<" | "<<#b<<" : "<<b<<endl;
// #define check3(a, b, c)  cout<<#a<<" : "<<a<<" | "<<#b<<" : "<<b<<" |
// "<<#c<<" : "<<c<<endl; #define SWIFT
// ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)

// // void testCase(){

// // 	int z = 4;
// //    	int a = (z ^ 4);
// //    	int b = (z ^ 5110);
// //    	int c = (z ^ 307);
// //    	int d = (z ^ 212);
// //    	int e = (z ^ (4 + 307 + 5110 + 212));

// //    	check(a)
// //    	check(b)
// //    	check(c)
// //    	check(d)
// //    	check(e)
// //    	check(a + b + c + d)
// // }

// signed main(){
//     SWIFT;

#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
lli mod = 1000000007;
typedef pair<lli, pair<lli, lli>> ppi;
lli zero_x[] = {-1, 0, 1, 0};
lli zero_y[] = {0, -1, 0, 1};
lli one_x[] = {-2, -2, -2, -2, -2, -1, -1, -1, -1, -1, 0, 0,
               0,  0,  1,  1,  1,  1,  1,  2,  2,  2,  2, 2};
lli one_y[] = {-2, -1, 0,  1,  2, -2, -1, 0,  1,  2, -2, -1,
               1,  2,  -2, -1, 0, 1,  2,  -2, -1, 0, 1,  2};
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);

  // #ifndef ONLINE_JUDGE
  //     freopen("input.txt","r",stdin);
  //     freopen("output.txt","w",stdout);
  // #endif
  lli h, w;
  cin >> h >> w;
  lli ch, cw, dh, dw;
  cin >> ch >> cw >> dh >> dw;
  string mat[h];
  for (lli i = 0; i < h; ++i)
    cin >> mat[i];
  priority_queue<ppi> q;
  q.push({0, {ch - 1, cw - 1}});
  lli vis[h][w];
  vis[ch - 1][cw - 1] = 1;
  lli cost[h][w];
  cost[ch - 1][cw - 1] = 0;
  for (lli i = 0; i < h; ++i)
    for (lli j = 0; j < w; ++j)
      cost[i][j] = LLONG_MAX;
  while (!q.empty()) {
    lli curr = q.top().first;
    lli r = q.top().second.first;
    lli c = q.top().second.second;
    // cout<<r<<" "<<c<<" "<<curr<<endl;
    q.pop();
    for (lli i = 0; i < 4; ++i) {
      lli next_r = r + zero_x[i];
      lli next_c = c + zero_y[i];
      if (next_r >= 0 && next_r < h && next_c >= 0 && next_c < w &&
          (cost[next_r][next_c] > curr) && mat[next_r][next_c] == '.') {
        cost[next_r][next_c] = curr;
        q.push({curr, {next_r, next_c}});
      }
    }
    for (lli i = 0; i < 24; ++i) {
      lli next_r = r + one_x[i];
      lli next_c = c + one_y[i];
      if (next_r >= 0 && next_r < h && next_c >= 0 && next_c < w &&
          (cost[next_r][next_c] > (curr + 1)) && mat[next_r][next_c] == '.') {
        cost[next_r][next_c] = curr + 1;
        q.push({curr + 1, {next_r, next_c}});
      }
    }
  }
  if (cost[dh - 1][dw - 1] == LLONG_MAX)
    cout << -1 << endl;
  else
    cout << cost[dh - 1][dw - 1] << endl;

  // }

  // // int t = 1;
  // int t; cin >> t;
  // FOR(i, 0, t){
  // 	cout << "Case #" << (i + 1) << ": ";
  //     testCase();
  // }
  // return 0;
}