けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 135 A - Harmony (灰色, 100 点)

これは難しい!

問題概要

2 個の整数  A, B が与えられる。

 |A - K| = |B - K|

を満たすような整数  K が存在すればそれを答えて、存在しない場合には "IMPOSSIBLE" と答えよ。

解法

これは難しい。結論から言えば、 K は整数でなくてもよいならば、


 A, B の平均値


となる。下図のように、 K A, B のちょうど中間にある場合に問題文の条件を満たすからだ ( A = B の場合のみ、 K がどの場所にあってもよい)。

よって、

 \displaystyle K = \frac{A + B}{2}

を答えとすればよさそうだ。しかし、 A + B 2 で割り切れない場合は  K は整数とはならない。このことを考慮すると、次のように答えればよい。

  •  A + B 2 で割り切れるとき:(A + B) / 2 が答え
  • そうでないとき:"IMPOSSIBLE" が答え

なお、 A = B の場合はかならず  A + B 2 で割り切れるので心配せずに (A + B) / 2 を答えれば OK。

#include <bits/stdc++.h>
using namespace std;

int main() {
    int A, B;
    cin >> A >> B;
    if ((A + B) % 2 == 0) cout << (A + B) / 2 << endl;
    else cout << "IMPOSSIBLE" << endl;
}