B - Crane and Turtle(ABC170復習)

6月14日に開催されたAtCoder Beginner Contest 170

B問題の復習。

各問題の制約や入力・出力例はリンク先(AtCoderのサイト)へ。

B - Crane and Turtle

問題文
庭に何匹かの動物がいます。これらはそれぞれ、2 本の足を持つ鶴か 4 本の足を持つ亀のいずれかです。
高橋くんは、「庭の動物の総数は X 匹で、それらの足の総数は Y 本である」と発言しています。この発言が正しいような鶴と亀の数の組合せが存在するか判定してください。

入力
入力は以下の形式で標準入力から与えられる。
X Y

出力
発言が正しいような鶴と亀の数の組合せが存在すれば Yes、なければ No と出力せよ。

B - Crane and Turtle

提出したコード

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問題は素直に解けばいいと聞いたので、素直にやった。

意外と奥が深い問題かもしれない。