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

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

AtCoder ABC 259 A - Growth Record (6Q, 灰色, 100 点)

きっちり整理しよう! この手の問題は、混乱したらグラフをかくといい!

問題概要

高橋君は  N 歳の誕生日を迎えて、身長は  T cm となった。

  • 高橋君は  X 歳までは毎年  D cm ずつ伸びた
  • 高橋君は  X 歳以降は身長が変化しなかった

高橋君の  M 歳のときの身長は何 cm でしょうか。

制約

  •  0 \le M \lt N \le 100
  •  1 \le X \le N
  •  1 \le T \le 200
  •  1 \le D \le 100

考えたこと

この手の問題は頭が混乱するのでグラフを描こう!!! 次の図のように整理できる。

このように整理したとき、まずは 0 歳のときの身長( B とする)を求めるとよさそうである。毎年  D cm 伸びて、 X 歳で  T cm なので、


 B = T - DX


と求められる。

 M 歳の身長

ここまで来れば簡単だ。

  •  M \le X のとき: B cm から、毎年  D cm ずつ、 M 年伸びるので、 B + DM cm
  •  M \gt X のとき: T cm

と求められる。

コード

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

int main() {
    int N, M, X, T, D;
    cin >> N >> M >> X >> T >> D;

    int B = T - D * X;
    if (M <= X) cout << B + D * M << endl;
    else cout << T << endl;
}