くしらくんの移動方法から、なるべく最短となる距離でゴールへ移動することを考えればよいことが分かります。
このグリッドでは上下左右がつながっているので、縦方向の最短距離は、とすると、 です。
同様に横方向の最短距離は、とすると、 です。
また、縦に 、横に の距離がある場合には、斜め移動を 回した方が横移動を 回行うよりもコストが低いです。
よって、斜め移動をする回数は 回、横移動をする回数は 回です。
最終的なコストは です。
以上より各テストケースについて で答えることができるので、 で解くことが出来ます。
t = int(input())
for _ in range(t):
h, w, sx, sy, gx, gy = map(int,input().split())
dx = abs(gx - sx)
dy = abs(gy - sy)
dx = min(dx, h-dx)
dy = min(dy, w-dy)
ans = 3 * min(dx, dy) + 2 * (max(dx, dy) - min(dx, dy))
print(ans)
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
ll solve(ll sx, ll sy, ll gx, ll gy) {
ll dx = abs(sx - gx), dy = abs(sy - gy);
return min(dx, dy) * 3 + (max(dx, dy) - min(dx, dy)) * 2;
}
int main() {
int q;
cin >> q;
for (int i = 0; i < q; i++) {
ll h, w, sx, sy, gx, gy;
cin >> h >> w >> sx >> sy >> gx >> gy;
ll ans = 8e18;
for (ll dx = -1; dx <= 1; dx++) {
for (ll dy = -1; dy <= 1; dy++) {
ans = min(ans, solve(sx, sy, gx + h * dx, gy + dy * w) );
}
}
cout << ans << endl;
}
}