Edit

【pythonでABC184を解説】C - Super Ryuma

問題概要

問題ページ

C - Super Ryuma
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()

-Edit
-