問題概要
問題ページ
-
C - Super Ryuma
問題ページへ移動する
問題文
無限に広がる \(2\) 次元グリッドがあり、マス \((r_1, c_1)\) に駒「超竜馬」が置かれています。
この駒は、 \(1\) 手で次のような動きができます。
より正確には、超竜馬がマス \((a, b)\) にあるとき、以下のいずれかの条件を満たすマス \((c, d)\) に動かすことができます。
- \(a + b = c + d\)
- \(a - b = c - d\)
- \(|a - c| + |b - d| \le 3\)
超竜馬を \((r_1, c_1)\) から \((r_2, c_2)\) に動かすのに必要な最小手数を求めてください。
制約
- 入力は全て整数
- \(1 \le r_1, c_1, r_2, c_2 \le 10^9\)
問題の考察
ACコード
import sys
def solve():
input = sys.stdin.readline
mod = 10 ** 9 + 7
r1, c1 = list(map(int, input().rstrip('\n').split()))
r2, c2 = list(map(int, input().rstrip('\n').split()))
if r1 == r2 and c1 == c2:
print(0)
elif r1 + c1 == r2 + c2:
print(1)
elif r1 - c1 == r2 - c2:
print(1)
elif abs(r1 - r2) + abs(c1 - c2) <= 3:
print(1)
elif (abs(r1 - r2) + abs(c1 - c2)) % 2 == 0:
print(2)
elif abs(r1 + c1 - r2 - c2) <= 3:
print(2)
elif abs(r1 - c1 - r2 + c2) <= 3:
print(2)
elif abs(r1 - r2) + abs(c1 - c2) <= 6:
print(2)
else:
print(3)
if __name__ == '__main__':
solve()