Problem:
Score : 300 points

Problem Statement

There is a rectangle in a coordinate plane. The coordinates of the four vertices are (0,0), (W,0), (W,H), and (0,H).
You are given a point (x,y) which is within the rectangle or on its border. We will draw a straight line passing through (x,y) to cut the rectangle into two parts. Find the maximum possible area of the part whose area is not larger than that of the other. Additionally, determine if there are multiple ways to cut the rectangle and achieve that maximum.

Constraints

1 \leq W,H \leq 10^9

0\leq x\leq W

0\leq y\leq H

All values in input are integers.

Input

Input is given from Standard Input in the following format:

W H x y

Output

Print the maximum possible area of the part whose area is not larger than that of the other, followed by 1 if there are multiple ways to cut the rectangle and achieve that maximum, and 0 otherwise.

The area printed will be judged correct when its absolute or relative error is at most 10^{-9}.

Sample Input 1

2 3 1 2

Sample Output 1

3.000000 0

The line x=1 gives the optimal cut, and no other line does.

Sample Input 2

2 2 1 1

Sample Output 2

2.000000 1

Solution in C# (Mono 4.6.2.0) (judge verdict: Wrong Answer)

using System;

public class RectangleCutting
{
    public static void Main(string[] args)
    {
        int W, H, x, y;
        string[] input = Console.ReadLine().Split(new string[] {" "}, StringSplitOptions.RemoveEmptyEntries);
        W = Int32.Parse(input[0]);
        H = Int32.Parse(input[1]);
        x = Int32.Parse(input[2]);
        y = Int32.Parse(input[3]);
        // 縦横それぞれの中点を求める
        float halfW, halfH;
        halfW = W / 2.0f;
        halfH = H / 2.0f;
        float area = 0.0f;
        // 与えられた点に対して、縦分割、横分割の2パターンが考えられる
        // ただし、長方形の1辺上の点ならば分割は1種類のみ
        // xが縦辺上に存在する場合、分割方向は横方向のみ
        if (x == 0 || x == W)
        {   
            area = (y <= halfH) ? W * y : W * (H - y);
            Console.WriteLine($"{area} 0");
            return;
        }
        // yが横辺上に存在する場合、分割方向は縦方向のみ
        if (y == 0 || y == H)
        {
            area = (x <= halfW) ? x * H : (W - x) * H;
            Console.WriteLine($"{area} 0");
            return;
        }
        // x, yで表される点が長方形内部に存在する場合は、縦横二つの分割を考える
        float areaHorizontal = (y <= halfH) ? W * y : W * (H - y);
        float areaVertical = (x <= halfW) ? x * H : (W - x) * H;
        area = (areaHorizontal > areaVertical) ? areaHorizontal : areaVertical;
        int hasAnother = (areaHorizontal == areaVertical) ? 1 : 0;
        Console.WriteLine($"{area} {hasAnother}");
    }
}