Problem:


Score : 400 points

Problem Statement

There is a bar of chocolate with a height of H blocks and a width of W blocks.
Snuke is dividing this bar into exactly three pieces.
He can only cut the bar along borders of blocks, and the shape of each piece must be a rectangle.

Snuke is trying to divide the bar as evenly as possible.
More specifically, he is trying to minimize S_{max} - S_{min}, where S_{max} is the area (the number of blocks contained) of the largest piece, and S_{min} is the area of the smallest piece.
Find the minimum possible value of S_{max} - S_{min}.

Constraints

2 ≤ H, W ≤ 10^5

Input

Input is given from Standard Input in the following format:

H W

Output

Print the minimum possible value of S_{max} - S_{min}.

Sample Input 1

3 5

Sample Output 1

0

In the division below, S_{max} - S_{min} = 5 - 5 = 0.

Sample Input 2

4 5

Sample Output 2

2

In the division below, S_{max} - S_{min} = 8 - 6 = 2.

Sample Input 3

5 5

Sample Output 3

4

In the division below, S_{max} - S_{min} = 10 - 6 = 4.

Sample Input 4

100000 2

Sample Output 4

1

Sample Input 5

100000 100000

Sample Output 5

50000



Sample input:
3 5


Sample output:
0

Submission status: Wrong Answer

Solution code:
h, w = (int(i) for i in input().split())
sel_row1 = 10000
sel_row2 = 10000
sel_col1 = 10000
sel_col2 = 10000
sel_row3 = 10000
sel_col3 = 10000

if h&1:
    if h%3 == 0:
        sel_row1 = h/3
        sel_row2 = h/3
    else:
        sel_row1 = h//3
        sel_row2 = sel_row1 +1
else:
    sel_row1 = h//3 if h//3 != 0 else 10000
    sel_row2 = sel_row1 + 1
if w&1:
    if w%3 == 0:
        sel_col1 = w//3
        sel_col2 = w//3
    else:
        sel_col1 = w//3
        sel_col2 = sel_col1 + 1
else:
    sel_col1 = w//3 if w//3 != 0 else 10000
    sel_col2 = sel_col1 + 1
if h&1 and w&1:
    sel_row3 = sel_row2 + 1
    sel_col3 = sel_col2 + 1
else:
    sel_row3 = h//2
    sel_col3 = w//2

ans = set()
if h%2 == 0 and w%2 == 0:
    ans.add(abs((sel_row3 * sel_col3) - (h * sel_col3)))
    ans.add(abs((sel_row3 * sel_col3) - (w * sel_row3)))
    ans.add(abs((sel_row3*(w-sel_col1) - h*sel_col1)))
    ans.add(abs((sel_row3*(w-sel_col2) - h*sel_col2)))
    ans.add(abs((sel_row3*w - (h-sel_row3)*sel_col1)))
    ans.add(abs((sel_row3*w - (h-sel_row3)*sel_col2)))
    ans.add(abs((sel_col3*(h-sel_row1) - w*sel_row1)))
    ans.add(abs((sel_col3*(h-sel_row2) - w*sel_row2)))
    ans.add(abs((sel_col3*h - (w-sel_col3)*sel_row1)))
    ans.add(abs((sel_col3*h - (w-sel_col3)*sel_row2)))
    print(int(min(ans)))
elif h%2 == 0:
    ans.add(abs(sel_col1*h - (w - sel_col1)*sel_row3))
    ans.add(abs(sel_col2*h - (w - sel_col2)*sel_row3))
    ans.add(abs(sel_row3*sel_col3 - h*(w - sel_col3)))
    ans.add(abs(sel_col3*sel_col3 - (h - sel_row3)*w))
    ans.add(abs(sel_row1*w - sel_row2*w))
    ans.add(abs(h*sel_col1 - h*sel_col2))
    print(int(min(ans)))
elif w%2 == 0:
    ans.add(abs(sel_row1*w - (h - sel_row1)*sel_col3))
    ans.add(abs(sel_row2*w - (h - sel_row2)*sel_col3))
    ans.add(abs(sel_row3*sel_col3 - h*(w - sel_col3)))
    ans.add(abs(sel_col3*sel_col3 - (h - sel_row3)*w))
    ans.add(abs(h*sel_col1 - h*sel_col2))
    ans.add(abs(sel_row1*w - sel_row2*w))
    print(int(min(ans)))
else:
    ans.add(abs(sel_row1*w - sel_row2*w))
    ans.add(abs(sel_col1*h - sel_col2*h))

    ans_set = {(sel_row3*sel_col3),(h-sel_row3)*(sel_col3),h*(w-sel_col3)}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row2*sel_col3),(h-sel_row2)*(sel_col3),h*(w-sel_col3)}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row3*sel_col2),(h-sel_row3)*(sel_col2),h*(w-sel_col2)}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row2*sel_col2),(h-sel_row2)*(sel_col2),h*(w-sel_col2)}
    ans.add(max(ans_set) - min(ans_set))

    ans_set = {(sel_row3*sel_col3),(sel_row3)*(w-sel_col3),(h-sel_row3)*w}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row2*sel_col3),(sel_row2)*(w-sel_col3),(h-sel_row2)*w}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row3*sel_col2),(sel_row3)*(w-sel_col2),(h-sel_row3)*w}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row2*sel_col2),(sel_row2)*(w-sel_col2),(h-sel_row2)*w}
    ans.add(max(ans_set) - min(ans_set))

    ans_set = {(h-sel_row1)*(w-sel_col3),(sel_row1)*(w-sel_col3),h*sel_col3}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(h-sel_row3)*(w-sel_col3),(sel_row3)*(w-sel_col3),h*sel_col3}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(h-sel_row3)*(w-sel_col1),(sel_row3)*(w-sel_col1),h*sel_col1}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(h-sel_row3)*(w-sel_col2),(sel_row3)*(w-sel_col2),h*sel_col2}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(h-sel_row2)*(w-sel_col3),(sel_row2)*(w-sel_col3),h*sel_col3}
    ans.add(max(ans_set) - min(ans_set))
    print(int(min(ans)))

Submission status: Wrong Answer

Solution code:
h, w = (int(i) for i in input().split())
sel_row1 = 10000
sel_row2 = 10000
sel_col1 = 10000
sel_col2 = 10000
sel_row3 = 10000
sel_col3 = 10000

if h&1:
    if h%3 == 0:
        sel_row1 = h/3
        sel_row2 = h/3
    else:
        sel_row1 = h//3
        sel_row2 = sel_row1 +1
else:
    sel_row1 = h//3 if h//3 != 0 else 10000
    sel_row2 = sel_row1 + 1
if w&1:
    if w%3 == 0:
        sel_col1 = w//3
        sel_col2 = w//3
    else:
        sel_col1 = w//3
        sel_col2 = sel_col1 + 1
else:
    sel_col1 = w//3 if w//3 != 0 else 10000
    sel_col2 = sel_col1 + 1
if h&1 and w&1:
    sel_row3 = sel_row2 + 1
    sel_col3 = sel_col2 + 1
else:
    sel_row3 = h//2
    sel_col3 = w//2

ans = set()
if h%2 == 0 and w%2 == 0:
    ans.add(abs((sel_row3 * sel_col3) - (h * sel_col3)))
    ans.add(abs((sel_row3 * sel_col3) - (w * sel_row3)))
    ans.add(abs((sel_row3*(w-sel_col1) - h*sel_col1)))
    ans.add(abs((sel_row3*(w-sel_col2) - h*sel_col2)))
    ans.add(abs((sel_row3*w - (h-sel_row3)*sel_col1)))
    ans.add(abs((sel_row3*w - (h-sel_row3)*sel_col2)))
    ans.add(abs((sel_col3*(h-sel_row1) - w*sel_row1)))
    ans.add(abs((sel_col3*(h-sel_row2) - w*sel_row2)))
    ans.add(abs((sel_col3*h - (w-sel_col3)*sel_row1)))
    ans.add(abs((sel_col3*h - (w-sel_col3)*sel_row2)))
    print(int(min(ans)))
elif h%2 == 0:
    ans.add(abs(sel_col1*h - (w - sel_col1)*sel_row3))
    ans.add(abs(sel_col2*h - (w - sel_col2)*sel_row3))
    ans.add(abs(sel_row3*sel_col3 - h*(w - sel_col3)))
    ans.add(abs(sel_col3*sel_col3 - (h - sel_row3)*w))
    ans.add(abs(sel_row1*w - sel_row2*w))
    ans.add(abs(h*sel_col1 - h*sel_col2))
    print(int(min(ans)))
elif w%2 == 0:
    ans.add(abs(sel_row1*w - (h - sel_row1)*sel_col3))
    ans.add(abs(sel_row2*w - (h - sel_row2)*sel_col3))
    ans.add(abs(sel_row3*sel_col3 - h*(w - sel_col3)))
    ans.add(abs(sel_col3*sel_col3 - (h - sel_row3)*w))
    ans.add(abs(h*sel_col1 - h*sel_col2))
    ans.add(abs(sel_row1*w - sel_row2*w))
    print(int(min(ans)))
else:
    ans.add(abs(sel_row1*w - sel_row2*w))
    ans.add(abs(sel_col1*h - sel_col2*h))

    ans_set = {(sel_row3*sel_col3),(h-sel_row3)*(sel_col3),h*(w-sel_col3)}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row2*sel_col3),(h-sel_row2)*(sel_col3),h*(w-sel_col3)}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row3*sel_col2),(h-sel_row3)*(sel_col2),h*(w-sel_col2)}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row2*sel_col2),(h-sel_row2)*(sel_col2),h*(w-sel_col2)}
    ans.add(max(ans_set) - min(ans_set))

    ans_set = {(sel_row3*sel_col3),(sel_row3)*(w-sel_col3),(h-sel_row3)*w}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row2*sel_col3),(sel_row2)*(w-sel_col3),(h-sel_row2)*w}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row3*sel_col2),(sel_row3)*(w-sel_col2),(h-sel_row3)*w}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row2*sel_col2),(sel_row2)*(w-sel_col2),(h-sel_row2)*w}
    ans.add(max(ans_set) - min(ans_set))

    ans_set = {(h-sel_row3)*(w-sel_col3),(sel_row3)*(w-sel_col3),h*sel_col3}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(h-sel_row3)*(w-sel_col2),(sel_row3)*(w-sel_col2),h*sel_col2}
    ans.add(max(ans_set) - min(ans_set))
    print(int(min(ans)))

Submission status: Wrong Answer

Solution code:
h, w = map(int,input().split())

ans = h*w
if h % 3 == 0 or w % 3 == 0:
    ans = 0
else:
    ct = h
    for cy in range(1, w):
        c0 = ct * cy
        c1 = (w-cy) * (ct//2)
        c2 = h*w - c0 - c1
        cmax = max(c0, c1, c2)
        cmin = min(c0, c1, c2)
        #print(c0, c1, c2)
        if cmin > 0:
            ans = min(ans, cmax - cmin)
    ct = w
    for cy in range(1, h):
        c0 = ct * cy
        c1 = (h-cy) * (ct//2)
        c2 = h*w - c0 - c1
        cmax = max(c0, c1, c2)
        cmin = min(c0, c1, c2)
        #print(c0, c1, c2)
        if cmin > 0:
            ans = min(ans, cmax - cmin)

print(ans)

Submission status: Wrong Answer

Solution code:
h, w = map(int,input().split())

ans = h*w
if h % 3 == 0 or w % 3 == 0:
    ans = 0
else:
    ct = h
    for cy in range(1, w):
        c0 = ct * cy
        c1 = (w-cy) * (ct//2)
        c2 = h*w - c0 - c1
        cmax = max(c0, c1, c2)
        cmin = min(c0, c1, c2)
        #print(c0, c1, c2)
        ans = min(ans, cmax - cmin)
    ct = w
    for cy in range(1, h):
        c0 = ct * cy
        c1 = (h-cy) * (ct//2)
        c2 = h*w - c0 - c1
        cmax = max(c0, c1, c2)
        cmin = min(c0, c1, c2)
        #print(c0, c1, c2)
        ans = min(ans, cmax - cmin)

print(ans)

Submission status: Wrong Answer

Solution code:
h, w = (int(i) for i in input().split())
sel_row1 = 10000
sel_row2 = 10000
sel_col1 = 10000
sel_col2 = 10000
sel_row3 = 10000
sel_col3 = 10000

if h&1:
    if h%3 == 0:
        sel_row1 = h/3
        sel_row2 = h/3
    else:
        sel_row1 = h//3
        sel_row2 = sel_row1 +1
else:
    sel_row1 = h//3 if h//3 != 0 else 10000
    sel_row2 = sel_row1 + 1
if w&1:
    if w%3 == 0:
        sel_col1 = w//3
        sel_col2 = w//3
    else:
        sel_col1 = w//3
        sel_col2 = sel_col1 + 1
else:
    sel_col1 = w//3 if w//3 != 0 else 10000
    sel_col2 = sel_col1 + 1
if h&1 and w&1:
    sel_row3 = sel_row2 + 1
    sel_col3 = sel_col2 + 1
else:
    sel_row3 = h//2
    sel_col3 = w//2

ans = set()
if h%2 == 0 and w%2 == 0:
    ans.add(abs((sel_row3 * sel_col3) - (h * sel_col3)))
    ans.add(abs((sel_row3 * sel_col3) - (w * sel_row3)))
    ans.add(abs((sel_row3*(w-sel_col1) - h*sel_col1)))
    ans.add(abs((sel_row3*(w-sel_col2) - h*sel_col2)))
    ans.add(abs((sel_row3*w - (h-sel_row3)*sel_col1)))
    ans.add(abs((sel_row3*w - (h-sel_row3)*sel_col2)))
    ans.add(abs((sel_col3*(h-sel_row1) - w*sel_row1)))
    ans.add(abs((sel_col3*(h-sel_row2) - w*sel_row2)))
    ans.add(abs((sel_col3*h - (w-sel_col3)*sel_row1)))
    ans.add(abs((sel_col3*h - (w-sel_col3)*sel_row2)))
    print(int(min(ans)))
elif h%2 == 0:
    ans.add(abs(sel_col1*h - (w - sel_col1)*sel_row3))
    ans.add(abs(sel_col2*h - (w - sel_col2)*sel_row3))
    ans.add(abs(sel_row3*sel_col3 - h*(w - sel_col3)))
    ans.add(abs(sel_col3*sel_col3 - (h - sel_row3)*w))
    ans.add(abs(sel_row1*w - sel_row2*w))
    ans.add(abs(h*sel_col1 - h*sel_col2))
    print(int(min(ans)))
elif w%2 == 0:
    ans.add(abs(sel_row1*w - (h - sel_row1)*sel_col3))
    ans.add(abs(sel_row2*w - (h - sel_row2)*sel_col3))
    ans.add(abs(sel_row3*sel_col3 - h*(w - sel_col3)))
    ans.add(abs(sel_col3*sel_col3 - (h - sel_row3)*w))
    ans.add(abs(h*sel_col1 - h*sel_col2))
    ans.add(abs(sel_row1*w - sel_row2*w))
    print(int(min(ans)))
else:
    ans.add(abs(sel_row1*w - sel_row2*w))
    ans.add(abs(sel_col1*h - sel_col2*h))

    ans_set = {(sel_row3*sel_col3),(h-sel_row3)*(sel_col3),h*(w-sel_col3)}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row2*sel_col3),(h-sel_row2)*(sel_col3),h*(w-sel_col3)}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row3*sel_col2),(h-sel_row3)*(sel_col2),h*(w-sel_col2)}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row2*sel_col2),(h-sel_row2)*(sel_col2),h*(w-sel_col2)}
    ans.add(max(ans_set) - min(ans_set))

    ans_set = {(sel_row3*sel_col3),(sel_row3)*(w-sel_col3),(h-sel_row3)*w}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row2*sel_col3),(sel_row2)*(w-sel_col3),(h-sel_row2)*w}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row3*sel_col2),(sel_row3)*(w-sel_col2),(h-sel_row1)*w}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row2*sel_col2),(sel_row2)*(w-sel_col2),(h-sel_row2)*w}
    ans.add(max(ans_set) - min(ans_set))
    print(int(min(ans)))

Submission status: Wrong Answer

Solution code:

if __name__ == "__main__":
    H, W = map(int, input().split(" "))
    if (W % 3 == 0) or (H % 3 == 0):
        print("0")
        exit()
    else:
        Ans = H*W
        for x in range(1, W):
            for y in range(1, H):
                # |--
                S1 = H*x
                S2 = (W - x) * y
                S3 = H*W - (S1 + S2)
                Ans1 = max(S1, S2, S3) - min(S1, S2, S3)

                # ---
                #  |
                S1 = y*W
                S2 = (H - y) * x
                S3 = H*W - (S1 + S2)
                Ans2 = max(S1, S2, S3) - min(S1, S2, S3)

                # 最小値を更新
                Ans = min(Ans, Ans1, Ans2)

                if x == 33333:
                    print(Ans, Ans1, Ans2)
                # print("debug:(x, y) => (", x, y, ")")
                # print(Ans)
        print(Ans)
        exit()

Submission status: Wrong Answer

Solution code:
h, w = (int(i) for i in input().split())
sel_row1 = 10000
sel_row2 = 10000
sel_col1 = 10000
sel_col2 = 10000
sel_row3 = 10000
sel_col3 = 10000

if h&1:
    if h%3 == 0:
        sel_row1 = h/3
        sel_row2 = h/3
    else:
        sel_row1 = h//3
        sel_row2 = sel_row1 +1
else:
    sel_row1 = h//3 if h//3 != 0 else 10000
    sel_row2 = sel_row1 + 1
if w&1:
    if w%3 == 0:
        sel_col1 = w//3
        sel_col2 = w//3
    else:
        sel_col1 = w//3
        sel_col2 = sel_col1 + 1
else:
    sel_col1 = w//3 if w//3 != 0 else 10000
    sel_col2 = sel_col1 + 1
if h&1 and w&1:
    sel_row3 = sel_row2 + 1
    sel_col3 = sel_col2 + 1
else:
    sel_row3 = h//2
    sel_col3 = w//2

ans = set()
if h%2 == 0 and w%2 == 0:
    ans.add(abs((sel_row3 * sel_col3) - (h * sel_col3)))
    ans.add(abs((sel_row3 * sel_col3) - (w * sel_row3)))
    ans.add(abs((sel_row3*(w-sel_col1) - h*sel_col1)))
    ans.add(abs((sel_row3*(w-sel_col2) - h*sel_col2)))
    ans.add(abs((sel_row3*w - (h-sel_row3)*sel_col1)))
    ans.add(abs((sel_row3*w - (h-sel_row3)*sel_col2)))
    ans.add(abs((sel_col3*(h-sel_row1) - w*sel_row1)))
    ans.add(abs((sel_col3*(h-sel_row2) - w*sel_row2)))
    ans.add(abs((sel_col3*h - (w-sel_col3)*sel_row1)))
    ans.add(abs((sel_col3*h - (w-sel_col3)*sel_row2)))
    print(int(min(ans)))
elif h%2 == 0:
    ans.add(abs(sel_col1*h - (w - sel_col1)*sel_row3))
    ans.add(abs(sel_col2*h - (w - sel_col2)*sel_row3))
    ans.add(abs(sel_row3*sel_col3 - h*(w - sel_col3)))
    ans.add(abs(sel_col3*sel_col3 - (h - sel_row3)*w))
    print(int(min(ans)))
elif w%2 == 0:
    ans.add(abs(sel_row1*w - (h - sel_row1)*sel_col3))
    ans.add(abs(sel_row2*w - (h - sel_row2)*sel_col3))
    ans.add(abs(sel_row3*sel_col3 - h*(w - sel_col3)))
    ans.add(abs(sel_col3*sel_col3 - (h - sel_row3)*w))
    print(int(min(ans)))
else:
    ans.add(abs(sel_row1*w - sel_row2*w))
    ans.add(abs(sel_col1*h - sel_col2*h))

    ans_set = {(sel_row3*sel_col3),(h-sel_row3)*(sel_col3),h*(w-sel_col3)}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row2*sel_col3),(h-sel_row2)*(sel_col3),h*(w-sel_col3)}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row3*sel_col2),(h-sel_row3)*(sel_col2),h*(w-sel_col2)}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row2*sel_col2),(h-sel_row2)*(sel_col2),h*(w-sel_col2)}
    ans.add(max(ans_set) - min(ans_set))

    ans_set = {(sel_row3*sel_col3),(sel_row3)*(w-sel_col3),(h-sel_row3)*w}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row2*sel_col3),(sel_row2)*(w-sel_col3),(h-sel_row2)*w}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row3*sel_col2),(sel_row3)*(w-sel_col2),(h-sel_row1)*w}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row2*sel_col2),(sel_row2)*(w-sel_col2),(h-sel_row2)*w}
    ans.add(max(ans_set) - min(ans_set))
    print(int(min(ans)))

Submission status: Wrong Answer

Solution code:
h, w = (int(i) for i in input().split())
sel_row1 = 10000
sel_row2 = 10000
sel_col1 = 10000
sel_col2 = 10000
sel_row3 = 10000
sel_col3 = 10000

if h&1:
    if h%3 == 0:
        sel_row1 = h/3
        sel_row2 = h/3
    else:
        sel_row1 = h//3
        sel_row2 = sel_row1 +1
else:
    sel_row1 = h//3 if h//3 != 0 else 10000
    sel_row2 = sel_row1 + 1
if w&1:
    if w%3 == 0:
        sel_col1 = w//3
        sel_col2 = w//3
    else:
        sel_col1 = w//3
        sel_col2 = sel_col1 + 1
else:
    sel_col1 = w//3 if w//3 != 0 else 10000
    sel_col2 = sel_col1 + 1
if h&1 and w&1:
    sel_row3 = sel_row2 + 1
    sel_col3 = sel_col2 + 1
else:
    sel_row3 = h//2
    sel_col3 = w//2

ans = set()
if h%2 == 0 and w%2 == 0:
    ans.add(abs((sel_row3 * sel_col3) - (h * sel_col3)))
    ans.add(abs((sel_row3 * sel_col3) - (w * sel_row3)))
    ans.add(abs((sel_row3*(w-sel_col1) - h*sel_col1)))
    ans.add(abs((sel_row3*(w-sel_col2) - h*sel_col2)))
    ans.add(abs((sel_row3*w - (h-sel_row3)*sel_col1)))
    ans.add(abs((sel_row3*w - (h-sel_row3)*sel_col2)))
    ans.add(abs((sel_col3*(h-sel_row1) - w*sel_row1)))
    ans.add(abs((sel_col3*(h-sel_row2) - w*sel_row2)))
    ans.add(abs((sel_col3*h - (w-sel_col3)*sel_row1)))
    ans.add(abs((sel_col3*h - (w-sel_row3)*sel_row2)))
    print(int(min(ans)))
elif h%2 == 0:
    ans.add(abs(sel_col1*h - (w - sel_col1)*sel_row3))
    ans.add(abs(sel_col2*h - (w - sel_col2)*sel_row3))
    ans.add(abs(sel_row3*sel_col3 - h*(w-sel_row3)))
    ans.add(abs(sel_col3*sel_col3 - (h - sel_row3)*w))
    print(int(min(ans)))
elif w%2 == 0:
    ans.add(abs(sel_row1*w - (h - sel_row1)*sel_col3))
    ans.add(abs(sel_row2*w - (h - sel_row2)*sel_col3))
    ans.add(abs(sel_row3*sel_col3 - h*(w-sel_row3)))
    ans.add(abs(sel_col3*sel_col3 - (h - sel_row3)*w))
    print(int(min(ans)))
else:
    ans.add(abs(sel_row1*w - sel_row2*w))
    ans.add(abs(sel_col1*h - sel_col2*h))

    ans_set = {(sel_row3*sel_col3),(h-sel_row3)*(sel_col3),h*(w-sel_col3)}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row2*sel_col3),(h-sel_row2)*(sel_col3),h*(w-sel_col3)}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row3*sel_col2),(h-sel_row3)*(sel_col2),h*(w-sel_col2)}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row2*sel_col2),(h-sel_row2)*(sel_col2),h*(w-sel_col2)}
    ans.add(max(ans_set) - min(ans_set))

    ans_set = {(sel_row3*sel_col3),(sel_row3)*(w-sel_col3),(h-sel_row3)*w}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row2*sel_col3),(sel_row2)*(w-sel_col3),(h-sel_row2)*w}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row3*sel_col2),(sel_row3)*(w-sel_col2),(h-sel_row1)*w}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row2*sel_col2),(sel_row2)*(w-sel_col2),(h-sel_row2)*w}
    ans.add(max(ans_set) - min(ans_set))
    print(int(min(ans)))

Submission status: Wrong Answer

Solution code:
def calc(H, W):
    if (H % 3 == 0 or W % 3 == 0):
        return 0
    else:
        a = min(H, W)
        b = max(H, W)
        if (b % 3 == 1):
            return a // 2 if a % 2 == 0 else a
        else:
            c = b - b // 3 - 1
            if (c >= a):
                return a
            else:
                return (b // 3 + 1) * a - a // 2 * c
            


(H, W) = tuple([int(s) for s in input().split(' ')])
print(calc(H, W))

Submission status: Wrong Answer

Solution code:
H, W = map(int, input().split())

def long_cut(H, W):
    h = max(H, W)
    w = min(H, W)
    if h % split_num == 1:
        s_max_short_side = int(float(h) / 3)
    else:
        s_max_short_side = int(float(h) / 3) + 1

    s_max = s_max_short_side * w
    s_min = 0
    if int(H - s_max_short_side) % 2 == 0 or w % 2 == 0:
        s_min = int((H - s_max_short_side) * w / 2)
    else:
        s_min = int(max((H - s_max_short_side), w) / 2) * min((H - s_max_short_side), w)
    return abs(s_max - s_min)

def short_cut(H, W):
    h = min(H, W)
    w = max(H, W)

    if h % split_num == 1:
        s_max_short_side = int(float(h) / 3)
    else:
        s_max_short_side = int(float(h) / 3) + 1

Submission status: Wrong Answer

Solution code:
H, W = map(int, input().split())

split_num = 3
if H % split_num == 0 or W % split_num == 0:
	print(0)
else:
    h = max(H, W)
    w = min(H, W)
    if h % split_num == 1:
        s_max_short_side = int(float(h) / 3)
    else:
        s_max_short_side = int(float(h) / 3) + 1

    s_max = s_max_short_side * w
    s_min = 0
    if int(H - s_max_short_side) % 2 == 0 or w % 2 == 0:
        s_min = int((H - s_max_short_side) * w / 2)
    else:
        s_min = int(max((H - s_max_short_side), w) / 2) * min((H - s_max_short_side), w)
    print(abs(s_max - s_min))

Submission status: Wrong Answer

Solution code:
H, W = map(int, input().split())

split_num = 3
if H % split_num == 0 or W % split_num == 0:
	print(0)
else:
    h = max(H, W)
    w = min(H, W)
    if h % split_num == 1:
        s_max_short_side = int(float(h) / 3)
    else:
        s_max_short_side = int(float(h) / 3) + 1

    s_max = s_max_short_side * w
    splitted_w = int(w / 2)
    s_min = int((H - s_max_short_side) * splitted_w)
    print(abs(s_max - s_min))

Submission status: Wrong Answer

Solution code:
h, w = (int(i) for i in input().split())
sel_row1 = 10000
sel_row2 = 10000
sel_col1 = 10000
sel_col2 = 10000
sel_row3 = 10000
sel_col3 = 10000

if h&1:
    if h%3 == 0:
        sel_row1 = h/3
        sel_row2 = h/3
    else:
        sel_row1 = h//3
        sel_row2 = sel_row1 +1
else:
    sel_row1 = h//3 if h//3 != 0 else 10000
    sel_row2 = sel_row1 + 1
if w&1:
    if w%3 == 0:
        sel_col1 = w//3
        sel_col2 = w//3
    else:
        sel_col1 = w//3
        sel_col2 = sel_col1 + 1
else:
    sel_col1 = w//3 if w//3 != 0 else 10000
    sel_col2 = sel_col1 + 1
if h&1 and w&1:
    sel_row3 = sel_row2 + 1
    sel_col3 = sel_col2 + 1
else:
    sel_row3 = h//2
    sel_col3 = w//2

ans = set()
if h%2 == 0 and w%2 == 0:
    ans.add(abs((sel_row3 * sel_col3) - (h * sel_col3)))
    ans.add(abs((h*sel_col1) - (h*sel_col2)))
    ans.add(abs((sel_row1*w) - (sel_row2*w))) 
    ans.add(abs((sel_row3*(w-sel_col1) - h*sel_col1)))
    ans.add(abs((sel_row3*(w-sel_col2) - h*sel_col2)))
    ans.add(abs((sel_col3*(h-sel_row1) - w*sel_row1)))
    ans.add(abs((sel_col3*(h-sel_row2) - w*sel_row2)))
    print(int(min(ans)))
elif h%2 == 0:
    ans.add(abs(sel_col1*h - (w - sel_col1)*sel_row3))
    ans.add(abs(sel_col2*h - (w - sel_col2)*sel_row3))
    ans.add(abs(sel_row3*sel_col3 - h*(w-sel_row3)))
    ans.add(abs(sel_col3*sel_col3 - (h - sel_row3)*w))
    print(int(min(ans)))
elif w%2 == 0:
    ans.add(abs(sel_row1*w - (h - sel_row1)*sel_col3))
    ans.add(abs(sel_row2*w - (h - sel_row2)*sel_col3))
    ans.add(abs(sel_row3*sel_col3 - h*(w-sel_row3)))
    ans.add(abs(sel_col3*sel_col3 - (h - sel_row3)*w))
    print(int(min(ans)))
else:
    ans.add(abs(sel_row1*w - sel_row2*w))
    ans.add(abs(sel_col1*h - sel_col2*h))

    ans_set = {(sel_row3*sel_col3),(h-sel_row3)*(sel_col3),h*(w-sel_col3)}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row2*sel_col3),(h-sel_row2)*(sel_col3),h*(w-sel_col3)}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row3*sel_col2),(h-sel_row3)*(sel_col2),h*(w-sel_col2)}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row2*sel_col2),(h-sel_row2)*(sel_col2),h*(w-sel_col2)}
    ans.add(max(ans_set) - min(ans_set))

    ans_set = {(sel_row3*sel_col3),(sel_row3)*(w-sel_col3),(h-sel_row3)*w}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row2*sel_col3),(sel_row2)*(w-sel_col3),(h-sel_row2)*w}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row3*sel_col2),(sel_row3)*(w-sel_col2),(h-sel_row1)*w}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row2*sel_col2),(sel_row2)*(w-sel_col2),(h-sel_row2)*w}
    ans.add(max(ans_set) - min(ans_set))
    print(int(min(ans)))

Submission status: Wrong Answer

Solution code:
h, w = (int(i) for i in input().split())
sel_row1 = 10000
sel_row2 = 10000
sel_col1 = 10000
sel_col2 = 10000
sel_row3 = 10000
sel_col3 = 10000

if h&1:
    if h%3 == 0:
        sel_row1 = h/3
        sel_row2 = h/3
    else:
        sel_row1 = h//3
        sel_row2 = sel_row1 +1
else:
    sel_row1 = h//3 if h//3 != 0 else 10000
    sel_row2 = sel_row1 + 1
if w&1:
    if w%3 == 0:
        sel_col1 = w/3
        sel_col2 = w/3
    else:
        sel_col1 = w//3
        sel_col2 = sel_col1 + 1
else:
    sel_col1 = w//3 if w//3 != 0 else 10000
    sel_col2 = sel_col1 + 1
if h&1 and w&1:
    sel_row3 = sel_row2 + 1
    sel_col3 = sel_col2 + 1
else:
    sel_row3 = h//2
    sel_col3 = w//2

ans = set()
if h%2 == 0 and w%2 == 0:
    ans.add(abs((sel_row3 * sel_col3) - (h * sel_col3)))
    ans.add(abs((h*sel_col1) - (h*sel_col2)))
    ans.add(abs((sel_row1*w) - (sel_row2*w))) 
    ans.add(abs((sel_row3*(w-sel_col1) - h*sel_col1)))
    ans.add(abs((sel_row3*(w-sel_col2) - h*sel_col2)))
    ans.add(abs((sel_col3*(h-sel_row1) - w*sel_row1)))
    ans.add(abs((sel_col3*(h-sel_row2) - w*sel_row2)))
    print(min(ans))
elif h%2 == 0:
    ans.add(abs(sel_col1*h - (w - sel_col1)*sel_row3))
    ans.add(abs(sel_col2*h - (w - sel_col2)*sel_row3))
    print(min(ans))
elif w%2 == 0:
    ans.add(abs(sel_row1*w - (h - sel_row1)*sel_col3))
    ans.add(abs(sel_row2*w - (h - sel_row2)*sel_col3))
    print(min(ans))
else:
    ans.add(abs(sel_row1*w - sel_row2*w))
    ans.add(abs(sel_col1*h - sel_col2*h))

    ans_set = {(sel_row3*sel_col3),(h-sel_row3)*(sel_col3),h*(w-sel_col3)}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row2*sel_col3),(h-sel_row2)*(sel_col3),h*(w-sel_col3)}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row3*sel_col2),(h-sel_row3)*(sel_col2),h*(w-sel_col2)}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row2*sel_col2),(h-sel_row2)*(sel_col2),h*(w-sel_col2)}
    ans.add(max(ans_set) - min(ans_set))

    ans_set = {(sel_row3*sel_col3),(sel_row3)*(w-sel_col3),(h-sel_row3)*w}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row2*sel_col3),(sel_row2)*(w-sel_col3),(h-sel_row2)*w}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row3*sel_col2),(sel_row3)*(w-sel_col2),(h-sel_row1)*w}
    ans.add(max(ans_set) - min(ans_set))
    ans_set = {(sel_row2*sel_col2),(sel_row2)*(w-sel_col2),(h-sel_row2)*w}
    ans.add(max(ans_set) - min(ans_set))
    print(int(min(ans)))

Submission status: Wrong Answer

Solution code:
h, w = (int(i) for i in input().split())
sel_row1 = 10000
sel_row2 = 10000
sel_col1 = 10000
sel_col2 = 10000
sel_row3 = 10000
sel_col3 = 10000
if h&1:
    if h%3 == 0:
        sel_row1 = h/3
        sel_row2 = h/3
    else:
        sel_row1 = h//3
        sel_row2 = sel_row1 +1
else:
    sel_row1 = h//3 if h//3 != 0 else 10000
    sel_row2 = sel_row1 + 1
if w&1:
    if w%3 == 0:
        sel_col1 = w/3
        sel_col2 = w/3
    else:
        sel_col1 = w//3
        sel_col2 = sel_col1 + 1
else:
    sel_col1 = w//3 if w//3 != 0 else 10000
    sel_col2 = sel_col1 + 1
sel_row3 = h//2
sel_col3 = w//2

ans = set()
if h%2 == 0 and w%2 == 0:
    ans.add(abs((sel_row3 * sel_col3) - (h * sel_col3)))
    ans.add(abs((h*sel_col1) - (h*sel_col2)))
    ans.add(abs((sel_row1*w) - (sel_row2*w))) 
    ans.add(abs((sel_row3*(w-sel_col1) - h*sel_col1)))
    ans.add(abs((sel_row3*(w-sel_col2) - h*sel_col2)))
    ans.add(abs((sel_col3*(h-sel_row1) - w*sel_row1)))
    ans.add(abs((sel_col3*(h-sel_row2) - w*sel_row2)))
    print(min(ans))
elif h%2 == 0:
    ans.add(abs(sel_col1*h - (w - sel_col1)*sel_row3))
    ans.add(abs(sel_col2*h - (w - sel_col2)*sel_row3))
    print(min(ans))
elif w%2 == 0:
    ans.add(abs(sel_row1*w - (h - sel_row1)*sel_col3))
    ans.add(abs(sel_row2*w - (h - sel_row2)*sel_col3))
    print(min(ans))
else:
    ans1 = abs(sel_row1*w - (h-sel_row2)*w)
    ans2 = abs(sel_col1*h - (w-sel_col2)*h)
    ans3_set = {sel_row1*(w-sel_col1),(h-sel_row1)*(w-sel_col1),h*sel_col1}
    ans3 = max(ans3_set) - min(ans3_set)
    ans4_set = {sel_row1*(w-sel_col2),(h-sel_row1)*(w-sel_col2),h*sel_col2}
    ans4 = max(ans4_set) - min(ans4_set)
    ans5_set = {sel_row2*(w-sel_col1),(h-sel_row2)*(w-sel_col1),h*sel_col1}
    ans5 = max(ans5_set) - min(ans5_set)
    ans6_set = {sel_row2*(w-sel_col2),(h-sel_row2)*(w-sel_col2),h*sel_col2}
    ans6 = max(ans6_set) - min(ans6_set)
    print(int(min(ans1,ans2,ans3,ans4,ans5,ans6)))

Submission status: Wrong Answer

Solution code:
h, w = (int(i) for i in input().split())
if w < h:
    h, w = w, h
sel_row1 = 10000
sel_row2 = 10000
sel_col1 = 10000
sel_col2 = 10000
sel_row3 = 10000
sel_col3 = 10000
if h&1:
    if h%3 == 0:
        sel_row1 = h/3
        sel_row2 = h/3
    else:
        sel_row1 = h//3
        sel_row2 = sel_row1 +1
else:
    sel_row1 = h//3 if h//3 != 0 else 10000
    sel_row2 = sel_row1 + 1
    sel_row3 = h//2
if w&1:
    if w%3 == 0:
        sel_col1 = w/3
        sel_col2 = w/3
    else:
        sel_col1 = w//3
        sel_col2 = sel_col1 + 1
else:
    sel_col1 = w//3 if w//3 != 0 else 10000
    sel_col2 = sel_col1 + 1
    sel_col3 = w//2

ans = set()
if h%2 == 0 and w%2 == 0:
    ans.add(abs((sel_row3 * sel_col3) - (h * sel_col3)))
    ans.add(abs((h*sel_col1) - (h*sel_col2)))
    ans.add(abs((sel_row1*w) - (sel_row2*w))) 
    ans.add(abs((sel_row3*(w-sel_col1) - h*sel_col1)))
    ans.add(abs((sel_row3*(w-sel_col2) - h*sel_col2)))
    ans.add(abs((sel_col3*(h-sel_row1) - w*sel_row1)))
    ans.add(abs((sel_col3*(h-sel_row2) - w*sel_row2)))
    print(min(ans))
elif h%2 == 0:
    ans1 = abs(sel_col1*h - (w-sel_col1)*sel_row1)
    ans2 = abs(sel_col2*h - (w-sel_col2)*sel_row1)
    print(min(ans1,ans2))
elif w%2 == 0:
    ans1 = abs(sel_row1*w - (h-sel_row1)*sel_col1)
    ans2 = abs(sel_row2*w - (h-sel_row2)*sel_col1)
    print(min(ans1,ans2))
else:
    ans1 = abs(sel_row1*w - (h-sel_row2)*w)
    ans2 = abs(sel_col1*h - (w-sel_col2)*h)
    ans3_set = {sel_row1*(w-sel_col1),(h-sel_row1)*(w-sel_col1),h*sel_col1}
    ans3 = max(ans3_set) - min(ans3_set)
    ans4_set = {sel_row1*(w-sel_col2),(h-sel_row1)*(w-sel_col2),h*sel_col2}
    ans4 = max(ans4_set) - min(ans4_set)
    ans5_set = {sel_row2*(w-sel_col1),(h-sel_row2)*(w-sel_col1),h*sel_col1}
    ans5 = max(ans5_set) - min(ans5_set)
    ans6_set = {sel_row2*(w-sel_col2),(h-sel_row2)*(w-sel_col2),h*sel_col2}
    ans6 = max(ans6_set) - min(ans6_set)
    print(int(min(ans1,ans2,ans3,ans4,ans5,ans6)))