問題一覧 > 通常問題

No.3680 セグメント釣り

レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限 : 1024 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 61
作問者 : 👑 loop0919 / テスター : drken1215 岩井星人、今年で30歳らしいよ seekworser Mikan04y lp_ql yimiya(いみや) よには elphe Andrew8128 edon8618 leaf_1415 紫前燈太 triangle_coder 👑 みうね
お気に入りにしたユーザー ProblemId : 13389 / 第3回 岩井星人アンソロジープログラミングコンテスト (順位表) / 自分の提出
問題文最終更新日: 2026-09-04 20:28:36
第3回 岩井星人アンソロジープログラミングコンテストの他の問題:

問題文

セグメントツリーのように区切られた釣り堀があります。
岩井星人さんはここで仲間とセグメント釣りをする約束をしていましたが、遅刻しそうになっています

岩井星人さんが遅刻しないよう、釣り堀内を移動する最小コストを調べましょう。

$xy$ 平面上の $x$ 座標と $y$ 座標がともに非負である領域に、以下のような規則でタイルが配置されています。

  • 非負整数対 $(i, j)$ に対し、正方形 $A_{i, j} = \{(x, y) ~ | ~ i \leq x \leq i + 1 ~ \land ~ j \leq y \leq j + 1\}$ は $1$ つのタイルに含まれる。
  • $2$ つの非負整数対 $(i, j), (i', j')$ について、 $j = j'$ かつ $\lfloor i / 2^j \rfloor = \lfloor i' / 2^{j'} \rfloor$ を満たすとき(かつそのときに限り) $A_{i, j}$ と $A_{i', j'}$ は同じタイルに含まれる。

ただし、タイルは境界を含むものとし、共通部分が正の面積をもつような $2$ つの異なるタイルは存在しないとします。

岩井星人さんは、はじめ座標 $(S_x + 0.5, S_y + 0.5)$ にいます。
岩井星人さんは、以下の行動を $0$ 回以上の好きな回数行うことができます。

  • 岩井星人さんが座標 $(x, y)$ にいるとき、 座標 $(x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1)$ のいずれかに移動する。ただし、移動先の $x$ 座標と $y$ 座標のいずれかが負になるような移動はできない。

岩井星人さんは、異なるタイルを通るたびにコストを $1$ 支払います。
座標 $(T_x + 0.5, T_y + 0.5)$ に到達するために岩井星人さんが支払う必要のあるコストの総和の最小値を求めてください。

$T$ 個のテストケースが与えられるので、それぞれについて答えてください。

制約

  • 入力される値はすべて整数
  • $1 \leq T \leq 10^5$
  • $0 \leq S_x, S_y, T_x, T_y \leq 10^{18}$
  • $(S_x, S_y) \ne (T_x, T_y)$

入力

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

$T$
$\mathrm{case}_1$
$\mathrm{case}_2$
$\vdots$
$\mathrm{case}_T$

各テストケースは以下の形式で与えられる。

$S_x$ $S_y$ $T_x$ $T_y$

出力

各テストケースに対する答えを順に改行区切りで出力せよ。

サンプル

サンプル1
入力
3
1 0 4 1
2 4 15 4
0 0 1000000000000000000 1000000000000000000
出力
3
0
1000000000000000000

$1$ 番目のテストケースについて、以下のように行動をすることで、コスト $3$ を達成することができます。

  • 座標 $(1.5, 0.5)$ から座標 $(2.5, 0.5)$ に移動する。コストを $1$ 支払う。
  • 座標 $(2.5, 0.5)$ から座標 $(2.5, 1.5)$ に移動する。コストを $1$ 支払う。
  • 座標 $(2.5, 1.5)$ から座標 $(3.5, 1.5)$ に移動する。コストを支払わない。
  • 座標 $(3.5, 1.5)$ から座標 $(4.5, 1.5)$ に移動する。コストを $1$ 支払う。

コスト $2$ 以下を達成することができないため、 $3$ が答えです。

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。