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

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

AtCoder ABC 124 A - Buttons (8Q, 灰色, 100 点)

たったこれだけの問題でも、学ぶべきことがすごくあるイメージ!!!

問題へのリンク

問題概要

2 つのボタンがあってそれぞれ大きさが  A, B である。

大きさ  X のボタンを押すとコインが  X 円もらえて、ボタンの大きさが 1 減って  X-1 になる。

2 回だけ好きなボタンを押すことができる。最大でコインが何円得られるでしょうか?

制約

  •  3 \le A, B \le 20

考えたこと

この手の問題で、できる限り思考停止できることが大事だと思う。editorial では丁寧に場合分けをしているけど、それさえ必要なくて、今回やりうる手は 3 通りしかない!!!

  1. 1 個目のボタンを 2 回押す
  2. 2 個目のボタンを 2 回押す
  3. 両方のボタンを 1 回ずつ押す

この 3 通りしかない。

  • 1 の場合:コインは  A + (A-1) = 2A-1
  • 2 の場合:コインは  B + (B-1) = 2B-1
  • 3 の場合:コインは  A + B

よって何も考えずに、if 文使って場合分けとかもせずに、この 3 つの場合の最大値を求めればいい。すなわち

max({A*2-1, B*2-1, A+B})

をそのまま返せばよい。

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    int A, B; cin >> A >> B;
    cout << max({A*2-1, B*2-1, A+B}) << endl;
}