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

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

AtCoder ABC 371 A - Jiro (6Q, 灰色, 150 点)

整理するのが大変な問題

問題概要

3 つの相異なる整数  A, B, C がある(値は与えられない)。

これらの 3 つの整数の大小関係を表す 3 つの文字  S_{AB}, S_{AC}, S_{BC} が与えられる。たとえば  S_{AB} が '<' であるとき、 A \lt B であることを表す。 S_{AB} が '>' であるとき、 A \gt B であることを表す。

3 つの整数  A, B, C のうち、メディアンがどれであるかを特定せよ。

考えたこと

公式解説はとてもシンプルですごい。

ここでは力技で場合分けして解くことにした。


  •  A \lt B のとき
    •  B \lt C のとき:メディアンは  B
    • そうでないとき:メディアンは  A, C のうちの大きい方、つまり
      •  A \lt C のとき:メディアンは  C
      •  A \gt C のとき:メディアンは  A
  •  A \gt B のとき
    •  B \gt C のとき:メディアンは  B
    • そうでないとき:メディアンは  A, C のうちの小さい方、つまり
      •  A \gt C のとき:メディアンは  C
      •  A \lt C のとき:メディアンは  A

コード

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

int main() {
    char ab, ac, bc;
    cin >> ab >> ac >> bc;
    if (ab == '<') {
        if (bc == '<') cout << 'B' << endl;
        else cout << (ac == '<' ? 'C' : 'A') << endl;
    } else {
        if (bc == '>') cout << 'B' << endl;
        else cout << (ac == '>' ? 'C' : 'A') << endl;
    }
}