結果
| 問題 |
No.3108 Luke or Bishop
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 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 |
ソースコード
#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;
}