6月14日に開催されたAtCoder Beginner Contest 170。
B問題の復習。
各問題の制約や入力・出力例はリンク先(AtCoderのサイト)へ。
B - Crane and Turtle
問題文
庭に何匹かの動物がいます。これらはそれぞれ、2 本の足を持つ鶴か 4 本の足を持つ亀のいずれかです。
高橋くんは、「庭の動物の総数は X 匹で、それらの足の総数は Y 本である」と発言しています。この発言が正しいような鶴と亀の数の組合せが存在するか判定してください。入力
入力は以下の形式で標準入力から与えられる。
X Y出力
発言が正しいような鶴と亀の数の組合せが存在すればYes
、なければNo
と出力せよ。
提出したコード
x, y = gets.split.map(&:to_i) (0..x).each do |n| if 4 * n + 2 * (x - n) == y puts "Yes" exit end end puts "No"
結果:AC(正解) 実行時間:55 ms
考え方
鶴亀算というやつ。
鶴と亀の合計が x 匹で、足の合計が y 本。
足が4本の亀の匹数をn
とすると、鶴の数は(x -n)
と表せる。
どちらかが0
匹の場合もありえるとのことなので、亀が0匹〜 x匹までをeach
で繰り返して、足の本数の合計4 * n + 2 * (x - n)
がy
と等しくなったらYes
を出力してプログラム終了。
0匹〜 x匹まで繰り返してもy
と等しくならなかったらNo
を出力。
感想
A・B問題は素直に解けばいいと聞いたので、素直にやった。
意外と奥が深い問題かもしれない。