競技プログラミング用 知識集積所
ABC433A - Happy Birthday! 4
最終更新:
sport_programming
-
view
問題
必要知識
別解の場合、それらに加えて
考え方
さて、条件に当てはまるならYesを答えるのでif分岐を使えばいいということはすぐにわかる。
問題はその条件にどんな式を書けばよいかである。
問題はその条件にどんな式を書けばよいかである。
問題で言っていることを「T年後にそうなっている」と考えると
X+T = Z*(Y+T)
ということである。
これは、Tについて方程式を解くと
これは、Tについて方程式を解くと
T = (X-Z*Y)/(Z-1)
という解になる。
(入力条件よりZ>1であることに注意。仮にZ=1もあり得る場合にはコーナーケース対応が必要)
(入力条件よりZ>1であることに注意。仮にZ=1もあり得る場合にはコーナーケース対応が必要)
つまり、これが0以上の整数になればよいので、if分岐に書くべき条件は
- (X-Z*Y)/(Z-1)が割り切れる
- (X-Z*Y)/(Z-1)が0以上、つまりX-Z*Yが0以上
を「かつ」でつないだものである。
解答例
注意点
別解
シミュレーションで答える
forループを使って、実際に1歳ずつ年を取らせて判断してもよい。
問題はループの終了条件。
これは、今回の入力であり得る最大条件である98まで回せばいい(あるいはXまで回せばよい)。
また、「さすがに1000年を超えることはないやろ」くらいの雑な見積もりで強行突破ACも可能といえば可能。
解答例
問題はループの終了条件。
これは、今回の入力であり得る最大条件である98まで回せばいい(あるいはXまで回せばよい)。
また、「さすがに1000年を超えることはないやろ」くらいの雑な見積もりで強行突破ACも可能といえば可能。
解答例