タムログ

プログラミングについての情報発信をしていきます!

AtCoder Beginner Contest 170 B を Python で

こんばんは。本日行われた AtCoder Beginner Contest 170 B を Python で解説していきたいと思います。
それでは,まずは問題文から。


B – Crane and Turtle


実行時間制限: 2 sec / メモリ制限: 1024 MB×

配点 : 200 点

問題文

庭に何匹かの動物がいます。これらはそれぞれ、2 本の足を持つ鶴か 4 本の足を持つ亀のいずれかです。

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

制約

  • 1≤X≤100
  • 1≤Y≤100
  • 入力中のすべての値は整数である。

入力

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

X Y

出力

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


入力例 1

3 8

出力例 1

Yes

「庭にいる動物の総数は 3 匹で、それらの動物の足の総数は 8 本である」という発言は、鶴が 2 羽、亀が 1 匹いる場合に正しいため、発言が正しいような鶴と亀の数の組合せは存在します。


入力例 2

2 100

出力例 2

No

この発言が正しいような鶴と亀の数の組合せは存在しません。


入力例 3

1 2

出力例 3

Yes

鶴と亀のうち一方のみが存在する場合も考慮します。


解説

中学受験とかでおなじみのつるかめ算が頭によぎる問題ですね。ただ,今回は鶴と亀のそれぞれの数を出せと言うのではなく,それぞれの数が存在するか否かを出力せよという問題です。

とりあえず,鶴と亀のそれぞれの数を出してみましょう。連立方程式を立てて出しましょう。鶴の数を a,亀の数を b とすると,総数と足の数で次の二式が立てられます。

  • a + b = X
  • 2×a + 4×b = Y

これを解くと次のようになります。

  • a = 2×X – Y/2
  • b = Y/2 – X

ここで,考える条件は,
「a,bそれぞれが負でない整数になる」
です。匹数なのに負の数になるのはおかしいですし,整数でない数になるのもおかしいのでこうなります。ただ,0匹も含めるので,自然数ではなく,負でない整数です。

まず,整数になるという条件は,先ほど出した式から,Y が2で割り切れたらよく,負でないという条件は,aとbがどちらも0以上になるとすればよいです。
結局この条件分岐で判断すればよいです。それでは,解答例に移ります。

解答例

x,y = map(int, input().split())

a = (4*x-y)/2
b = (y-2*x)/2
if y%2 == 0 and a >=0 and b>=0:
    print('Yes')
else:
    print('No')

いかがだったでしょうか。
問題設定はやはりA問題と比べると少し煩雑にはなりますが,条件分岐はそこまで複雑なものにはなりませんね。
もし分からないところがあれば twitter で気軽にどうぞ。

少しでも参考になれば,twitter のフォロー,ファボ,RTよろしくお願いします。
それでは!