Language: C++

// #define _GLIBCXX_DEBUG // for STL debug (optional)
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <string>
#include <cstring>
#include <deque>
#include <list>
#include <queue>
#include <stack>
#include <vector>
#include <utility>
#include <algorithm>
#include <map>
#include <set>
#include <complex>
#include <cmath>
#include <limits>
#include <cfloat>
#include <climits>
#include <ctime>
#include <cassert>
#include <numeric>
#include <fstream>
#include <functional>
#include <bitset>
using namespace std;
using ll = long long int;
using int64 = long long int;
 
template<typename T> void chmax(T &a, T b) {a = max(a, b);}
template<typename T> void chmin(T &a, T b) {a = min(a, b);}
template<typename T> void chadd(T &a, T b) {a = a + b;}
 
int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};
const int INF = 1LL << 29;
const ll LONGINF = 1LL << 60;
const ll MOD = 1000000007LL;

struct Elem {
    int x, y, d, dist, straight;
    Elem(int x_, int y_, int d_, int dist_, int s) :
        x(x_), y(y_), d(d_), dist(dist_), straight(s) {}
    bool operator<(const Elem &e) const {
        if(dist != e.dist) return dist < e.dist;
        return straight < e.straight;
    }
};

int main() {
    int H, W, K; scanf("%d%d%d", &H, &W, &K);
    int sx, sy, gx, gy; scanf("%d%d%d%d", &sx, &sy, &gx, &gy);
    sx--, sy--, gx--, gy--;

    vector<string> board(H);
    for(int i=0; i<H; i++) {
        cin >> board[i];
    }
    
    const pair<int, int> NIL(INF, INF);
    vector< vector< vector< pair<int, int> > > >
        ans(H, vector< vector< pair<int, int> > >(W,
                                                  vector< pair<int, int> >(4, NIL)));

    queue<Elem> que;
    for(int k=0; k<4; k++) {
        ans[sx][sy][k] = make_pair(0, 0);
        que.emplace(sx, sy, k, 0, 0);
    }
    while(que.size()) {
        Elem e = que.front(); que.pop();
        int x = e.x, y = e.y, d = e.d, dist = e.dist, straight = e.straight;
        if(dist > ans[x][y][d]) continue;
        for(int nd=0; nd<4; nd++) {
            int nx = x + dx[nd], ny = y + dy[nd];
            if(nx < 0 or nx >= H or ny < 0 or ny >= W) continue;
            if(board[nx][ny] == '@') continue;

            int n_dist = dist, n_straight = straight + 1;
            if(d != nd or straight == K) {
                n_dist++;
                n_straight = 1;
            }
            if(make_pair(n_dist, n_straight) < ans[nx][ny][nd]) {
                ans[nx][ny][nd] = make_pair(n_dist, n_straight);
                que.emplace(nx, ny, nd, n_dist, n_straight);
            }
        }
    }

    int res = INF;
    for(int k=0; k<4; k++) {
        if(ans[gx][gy][k] == NIL) continue;
        int cand = ans[gx][gy][k].first;
        if(ans[gx][gy][k].second > 0) cand++;
        chmin(res, cand);
    }
    if(res == INF) puts("-1");
    else printf("%d\n", res);
    return 0;
}


Compiler output:
a.cc: In function 'int main()':
a.cc:74:17: error: no match for 'operator>' (operand types are 'int' and '__gnu_cxx::__alloc_traits<std::allocator<std::pair<int, int> >, std::pair<int, int> >::value_type' {aka 'std::pair<int, int>'})
   74 |         if(dist > ans[x][y][d]) continue;
In file included from /usr/include/c++/14/string:48,
                 from /usr/include/c++/14/bits/locale_classes.h:40,
                 from /usr/include/c++/14/bits/ios_base.h:41,
                 from /usr/include/c++/14/ios:44,
                 from /usr/include/c++/14/ostream:40,
                 from /usr/include/c++/14/iostream:41,
                 from a.cc:2:
/usr/include/c++/14/bits/stl_iterator.h:462:5: note: candidate: 'template<class _Iterator> constexpr bool std::operator>(const reverse_iterator<_Iterator>&, const reverse_iterator<_Iterator>&)'
  462 |     operator>(const reverse_iterator<_Iterator>& __x,
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_iterator.h:462:5: note:   template argument deduction/substitution failed:
a.cc:74:30: note:   mismatched types 'const std::reverse_iterator<_Iterator>' and 'int'
   74 |         if(dist > ans[x][y][d]) continue;
      |                              ^
/usr/include/c++/14/bits/stl_iterator.h:507:5: note: candidate: 'template<class _IteratorL, class _IteratorR> constexpr bool std::operator>(const reverse_iterator<_Iterator>&, const reverse_iterator<_IteratorR>&)'
  507 |     operator>(const reverse_iterator<_IteratorL>& __x,
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_iterator.h:507:5: note:   template argument deduction/substitution failed:
a.cc:74:30: note:   mismatched types 'const std::reverse_iterator<_Iterator>' and 'int'
   74 |         if(dist > ans[x][y][d]) continue;
      |                              ^
/usr/include/c++/14/bits/stl_iterator.h:1714:5: note: candidate: 'template<class _IteratorL, class _IteratorR> constexpr bool std::operator>(const move_iterator<_IteratorL>&, const move_iterator<_IteratorR>&)'
 1714 |     operator>(const move_iterator<_IteratorL>& __x,
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_iterator.h:1714:5: note:   template argument deduction/substitution failed:
a.cc:74:30: note:   mismatched types 'const std::move_iterator<_IteratorL>' and 'int'
   74 |         if(dist > ans[x][y][d]) continue;
      |                              ^
/usr/include/c++/14/bits/stl_iterator.h:1774:5: note: candidate: 'template<class _Iterator> constexpr bool std::operator>(const move_iterator<_IteratorL>&, const move_iterator<_IteratorL>&)'
 1774 |     operator>(const move_iterator<_Iterator>& __x,
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_iterator.h:1774:5: note:   template argument deduction/substitution failed:
a.cc:74:30: note:   mismatched types 'const std::move_iterator<_IteratorL>' and 'int'
   74 |         if(dist > ans[x][y][d]) continue;
      |                              ^
In file included from /usr/include/c++/14/bits/stl_algobase.h:64,
                 from /usr/include/c++/14/string:51:
/usr/include/c++/14/bits/stl_pair.h:1058:5: note: candidate: 'template<class _T1, class _T2> constexpr bool std::operator>(const pair<_T1, _T2>&, const pair<_T1, _T2>&)'
 1058 |     operator>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_pair.h:1058:5: note:   template argument deduction/substitution failed:
a.cc:74:30: note:   mismatched types 'const std::pair<_T1, _T2>' and 'int'
   74 |         if(dist > ans[x][y][d]) continue;
      |                              ^
In file included from /usr/include/c++/14/bits/basic_string.h:47,
                 from /usr/include/c++/14/string:54:
/usr/include/c++/14/string_view:695:5: note: candidate: 'template<class _CharT, class _Traits> constexpr bool std::operator>(basic_string_view<_CharT, _Traits>, basic_string_view<_CharT, _Traits>)'
  695 |     operator> (basic_string_view<_CharT, _Traits> __x,
      |     ^~~~~~~~
/usr/include/c++/14/string_view:695:5: note:   template argument deduction/substitution failed:
a.cc:74:30: note:   mismatched types 'std::basic_string_view<_CharT, _Traits>' and 'int'
   74 |         if(dist > ans[x][y][d]) continue;
      |                              ^
/usr/include/c++/14/string_view:702:5: note: candidate: 'template<class _CharT, class _Traits> constexpr bool std::operator>(basic_string_view<_CharT, _Traits>, __type_identity_t<basic_string_view<_CharT, _Traits> >)'
  702 |     operator> (basic_string_view<_CharT, _Traits> __x,
      |     ^~~~~~~~
/usr/include/c++/14/string_view:702:5: note:   template argument deduction/substitution failed:
a.cc:74:30: note:   mismatched types 'std::basic_string_view<_CharT, _Traits>' and 'int'
   74 |         if(dist > ans[x][y][d]) continue;
      |                              ^
/usr/include/c++/14/string_view:710:5: note: candidate: 'template<class _CharT, class _Traits> constexpr bool std::operator>(__type_identity_t<basic_string_view<_CharT, _Traits> >, basic_string_view<_CharT, _Traits>)'
  710 |     operator> (__type_identity_t<basic_string_view<_CharT, _Traits>> __x,
      |     ^~~~~~~~
/usr/include/c++/14/string_view:710:5: note:   template argument deduction/substitution failed:
a.cc:74:30: note:   'std::pair<int, int>' is not derived from 'std::basic_string_view<_CharT, _Traits>'
   74 |         if(dist > ans[x][y][d]) continue;
      |                              ^
/usr/include/c++/14/bits/basic_string.h:3915:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> bool std::operator>(const __cxx11::basic_string<_CharT, _Traits, _Allocator>&, const __cxx11::basic_string<_CharT, _Traits, _Allocator>&)'
 3915 |     operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/14/bits/basic_string.h:3915:5: note:   template argument deduction/substitution failed:
a.cc:74:30: note:   mismatched types 'const std::__cxx11::basic_string<_CharT, _Traits, _Allocator>' and 'int'
   74 |         if(dist > ans[x][y][d]) continue;
      |                              ^
/usr/include/c++/14/bits/basic_string.h:3929:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> bool std::operator>(const __cxx11::basic_string<_CharT, _Traits, _Allocator>&, const _CharT*)'
 3929 |     operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/14/bits/basic_string.h:3929:5: note:   template argument deduction/substitution failed:
a.cc:74:30: note:   mismatched types 'const std::__cxx11::basic_string<_CharT, _Traits, _Allocator>' and 'int'
   74 |         if(dist > ans[x][y][d]) continue;
      |                              ^
/usr/include/c++/14/bits/basic_string.h:3942:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> bool std::operator>(const _CharT*, const __cxx11::basic_string<_CharT, _Traits, _Allocator>&)'
 3942 |     operator>(const _CharT* __lhs,
      |     ^~~~~~~~
/usr/include/c++/14/bits/basic_string.h:3942:5: note:   template argument deduction/substitution failed:
a.cc:74:30: note:   mismatched types 'const _CharT*' and 'int'
   74 |         if(dist > ans[x][y][d]) continue;
      |                              ^
In file included from /usr/include/c++/14/bits/memory_resource.h:47,
                 from /usr/include/c++/14/string:68:
/usr/include/c++/14/tuple:2619:5: note: candidate: 'template<class ... _TElements, class ... _UElements> constexpr bool std::operator>(const tuple<_UTypes ...>&, const tuple<_Elements ...>&)'
 2619 |     operator>(const tuple<_TElements...>& __t,
      |     ^~~~~~~~
/usr/include/c++/14/tuple:2619:5: note:   template argument deduction/substitution failed:
a.cc:74:30: note:   mismatched types 'const std::tuple<_UTypes ...>' and 'int'
   74 |         if(dist > ans[x][y][d]) continue;
      |                              ^
In file included from /usr/include/c++/14/deque:66,
                 from a.cc:7:
/usr/include/c++/14/bits/stl_deque.h:2349:5: note: candidate: 'template<class _Tp, class _Alloc> bool std::operator>(const deque<_Tp, _Alloc>&, const deque<_Tp, _Alloc>&)'
 2349 |     operator>(const deque<_Tp, _Alloc>& __x, const deque<_Tp, _Alloc>& __y)
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_deque.h:2349:5: note:   template argument deduction/substitution failed:
a.cc:74:30: note:   mismatched types 'const std::deque<_Tp, _Alloc>' and 'int'
   74 |         if(dist > ans[x][y][d]) continue;
      |                              ^
In file included from /usr/include/c++/14/list:65,
                 from a.cc:8:
/usr/include/c++/14/bits/stl_list.h:2203:5: note: candidate: 'template<class _Tp, class _Alloc> bool std::operator>(const __cxx11::list<_Tp, _Alloc>&, const __cxx11::list<_Tp, _Alloc>&)'
 2203 |     operator>(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y)
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_list.h:2203:5: note:   template argument deduction/substitution failed:
a.cc:74:30: note:   mismatched types 'const std::__cxx11::list<_Tp, _Alloc>' and 'int'
   74 |         if(dist > ans[x][y][d]) continue;
      |                              ^
In file included from /usr/include/c++/14/vector:66,
                 from /usr/include/c++/14/queue:63,
                 from a.cc:9:
/usr/include/c++/14/bits/stl_vector.h:2102:5: note: candidate: 'template<class _Tp, class _Alloc> bool std::operator>(const vector<_Tp, _Alloc>&, const vector<_Tp, _Alloc>&)'
 2102 |     operator>(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_vector.h:2102:5: note:   template argument deduction/substitution failed:
a.cc:74:30: note:   mismatched types 'const std::vector<_Tp, _Alloc>' and 'int'
   74 |         if(dist > ans[x][y][d]) continue;
      |                              ^
In file included from /usr/include/c++/14/queue:66:
/usr/include/c++/14/bits/stl_queue.h:411:5: note: candidate: 'template<class _Tp, class _Seq> bool std::operator>(const queue<_Tp, _Seq>&, const queue<_Tp, _Seq>&)'
  411 |     operator>(const queue<_Tp, _Seq>& __x, const queue<_Tp, _Seq>& __y)
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_queue.h:411:5: note:   template argument deducti