atcoder#PANASONIC2020F. Fractal Shortest Path

Fractal Shortest Path

配点 : 600600

問題文

非負整数 KK に対し、以下のようにレベル KK のフラクタルを定義します。

  • レベル 00 のフラクタルとは、白いマス一個のみからなるグリッドである。
  • K>0K > 0 のとき、レベル KK のフラクタルは 3K×3K3^K \times 3^K のグリッドである。このグリッドを 3K1×3K13^{K-1} \times 3^{K-1} のブロック 99 個に分割したとき、- 中央のブロックは全て黒マスからなる。
    • 他の 88 個のブロックは、レベル K1K-1 のフラクタルになっている。
  • 中央のブロックは全て黒マスからなる。
  • 他の 88 個のブロックは、レベル K1K-1 のフラクタルになっている。

たとえば、レベル 22 のフラクタルは下図の通りです。

レベル 2 のフラクタル

レベル 3030 のフラクタルにおいて、上から rr 番目、左から cc 番目のマスを (r,c)(r, c) と書きます。

QQ 個の整数組 (ai,bi,ci,di)(a_i, b_i, c_i, d_i) が与えられます。 それぞれの組について、(ai,bi)(a_i, b_i) から (ci,di)(c_i, d_i) への距離を求めてください。

ただし、(a,b)(a, b) から (c,d)(c, d) への距離とは、以下の条件を満たすような最小の nn とします。

  • ある白マスの列 (x0,y0),,(xn,yn)(x_0, y_0), \ldots, (x_n, y_n) が存在して、以下の条件を満たす。- (x0,y0)=(a,b)(x_0, y_0) = (a, b)
    • (xn,yn)=(c,d)(x_n, y_n) = (c, d)
    • 任意の i(0in1)i (0 \leq i \leq n-1) に対し、マス (xi,yi)(x_i, y_i)(xi+1,yi+1)(x_{i+1}, y_{i+1}) は辺で接する。
  • (x0,y0)=(a,b)(x_0, y_0) = (a, b)
  • (xn,yn)=(c,d)(x_n, y_n) = (c, d)
  • 任意の i(0in1)i (0 \leq i \leq n-1) に対し、マス (xi,yi)(x_i, y_i)(xi+1,yi+1)(x_{i+1}, y_{i+1}) は辺で接する。

制約

  • 1Q100001 \leq Q \leq 10000
  • 1ai,bi,ci,di3301 \leq a_i, b_i, c_i, d_i \leq 3^{30}
  • (ai,bi)(ci,di)(a_i, b_i) \neq (c_i, d_i)
  • (ai,bi),(ci,di)(a_i, b_i), (c_i, d_i) は白マスである。
  • 入力は全て整数である。

入力

入力は以下の形式で標準入力から与えられる。

QQ

a1 b1 c1 d1a_1 \ b_1 \ c_1 \ d_1

::

aQ bQ cQ dQa_Q \ b_Q \ c_Q \ d_Q

出力

QQ 行出力せよ。 ii 行目には、(ai,bi)(a_i, b_i) から (ci,di)(c_i, d_i) への距離を出力せよ。

2
4 2 7 4
9 9 1 9
5
8