torus711 のアレ

主に競技プログラミングの問題について書きます.PC 以外だと数式が表示されないかもしれないです

AtCoder Beginner Contest 170, B : Crane and Turtle

問題概要

 庭に鶴と亀が何匹かずついる.鶴は $2$ 本の足をもち,亀は $4$ 本の足をもつ.
 動物の総数が $X$ 匹であって足の総数は $Y$ であることがあり得るかどうか判定せよ.

制約

  • $1 \leq X, Y \leq 100$

解法

 鶴の羽数を固定したとします.鶴が $a$ 羽いるとき,亀は $X - a$ 匹いることになります.$b = X - a$ とします.このとき,足の総数は $2a + 4b$ と計算できます.鶴の羽数をありえる範囲($0$ 以上 $X$ 以下)で全部試して,それぞれについて足の総数を求めて $Y$ と比較し一致するものがあるかどうかを調べることで,問題を解くことができます.

コード (Haskell)

readInts = map ( fst . fromJust . B.readInt ) . B.words <$> B.getLine

main = do
	[ x, y ] <- readInts
	putStrLn $ which "No" "Yes" $ null $ do
		i <- [ 0 .. x ]
		let
			j = x - i
		guard $ i * 2 + j * 4 == y
		return ()