アットウィキロゴ
競技プログラミング用 知識集積所
掲示板 掲示板 ページ検索 ページ検索 メニュー メニュー

競技プログラミング用 知識集積所

ABC433A - Happy Birthday! 4

最終更新:

sport_programming

- view
管理者のみ編集可


問題


必要知識


別解の場合、それらに加えて

考え方

まずは入力内容を確認。
入力内容は整数が3つなので、int型の変数を3つ用意してcinで入力を受け取る。

さて、条件に当てはまるならYesを答えるのでif分岐を使えばいいということはすぐにわかる。
問題はその条件にどんな式を書けばよいかである。

問題で言っていることを「T年後にそうなっている」と考えると
X+T = Z*(Y+T)
ということである。
これは、Tについて方程式を解くと
T = (X-Z*Y)/(Z-1)
という解になる。
(入力条件よりZ>1であることに注意。仮にZ=1もあり得る場合にはコーナーケース対応が必要)

つまり、これが0以上の整数になればよいので、if分岐に書くべき条件は
  • (X-Z*Y)/(Z-1)が割り切れる
  • (X-Z*Y)/(Z-1)が0以上、つまりX-Z*Yが0以上
を「かつ」でつないだものである。

if分岐の中でcoutしてもいいし、出力用の変数を用意しておいて、if分岐の外でcoutしてもいい。

解答例


注意点


別解

シミュレーションで答える

forループを使って、実際に1歳ずつ年を取らせて判断してもよい。
問題はループの終了条件。
これは、今回の入力であり得る最大条件である98まで回せばいい(あるいはXまで回せばよい)。
また、「さすがに1000年を超えることはないやろ」くらいの雑な見積もりで強行突破ACも可能といえば可能。
解答例
最近更新されたスレッド
ウィキ募集バナー