torus711 のアレ

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

AtCoder Beginner Contest 178, B : Product Max

問題概要

 4 つの整数 $a, b, c, d$ が与えられる.$$\max_{ x \in [ a, b ], y \in [ c, d ] } xy$$ を求めよ.

制約

  • $-10^9 \leq a \leq b \leq 10^9$
  • $-10^9 \leq c \leq d \leq 10^9$

解法

 $xy$ の絶対値に着目すると,$x, y$ の絶対値がそれぞれ大きい方がより大きな値をとります.あとは符号の問題(負と負は正とかそういう)が残りますが,それぞれの区間の端の値以外を使った場合,それを区間の端の値(絶対値が大きくなる的なイメージ)に置き換えるとよりよい解を得られます.なので,$x$ は $a$ または $b$ ,$y$ は $c$ または $d$ の計 4 通りを試せばよいです.

コード

main = do
	[ a, b, c, d ] <- readIntegers
	print $ maximum $ do
		x <- [ a, b ]
		y <- [ c, d ]
		return $ x * y