若干注意力ゲーだった。端で折り返してこれることに注意。
問題概要
正の整数 が与えられる。2 つの整数
に対して毎回以下のような操作を行う。2 つの整数が一致させられるまでの最小回数を求めよ。
- 整数
が
でも
でもないとき、
と
のいずれかに置き換える
のとき、1 か 2 のいずれかに置き換える
のとき、
か
のいずれかに置き換える
制約
考えたこと
まず が偶数ならば、お互いに中点で出会うことができるので、
回となる。
そうでない場合は、
がマス 1 に行って、一回だけ待機して、折り返して
と合流する
回になる
がマス
に行って、一回だけ待機して、折り返して
と合流する
回になる
のうちの小さい方を採用すれば OK。
コード
#include <bits/stdc++.h> using namespace std; int main() { long long N, A, B; cin >> N >> A >> B; if (abs(A-B)%2 == 0) cout << abs(A-B) / 2 << endl; else { cout << min((A+B-1)/2, (N*2-A-B+1)/2) << endl; } }