若干注意力ゲーだった。端で折り返してこれることに注意。
問題概要
正の整数 が与えられる。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; } }