結果

問題 No.3108 Luke or Bishop
ユーザー Hayato Hamano
提出日時 2025-04-19 19:16:04
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 2 ms / 2,000 ms
コード長 1,007 bytes
コンパイル時間 2,114 ms
コンパイル使用メモリ 191,208 KB
実行使用メモリ 7,848 KB
最終ジャッジ日時 2025-04-19 19:16:07
合計ジャッジ時間 3,516 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 26
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    long long gx, gy;
    cin >> gx >> gy;

    // ゴールが原点なら 0 手
    if (gx == 0 && gy == 0) {
        cout << 0 << "\n";
        return 0;
    }

    // ルークの最小手数
    // x 軸または y 軸上なら 1 手、それ以外は 2 手
    int rook;
    if (gx == 0 || gy == 0) rook = 1;
    else rook = 2;

    // ビショップの最小手数
    // (gx+gy) が偶数なら同色マスで到達可能
    // → 斜め上 (|gx|=|gy|) 上にあれば 1 手、そうでなければ 2 手
    // 奇数なら到達不可能(∞手扱い)
    int bishop = 3;  // 3 は「到達不可能」を意味する大きめの値
    long long s = gx + gy;
    if (s % 2 == 0) {
        if (llabs(gx) == llabs(gy)) bishop = 1;
        else bishop = 2;
    }

    // 最適な駒での最小手数
    int ans = min(rook, bishop);
    cout << ans << "\n";

    return 0;
}
0