Road To Zero (Codeforces 1342A)
Tags: Greedy, math

You are given two integers $$$x$$$ and $$$y$$$. You can perform two types of operations:   Pay $$$a$$$ dollars and increase or decrease any of these integers by $$$1$$$. For example, if $$$x = 0$$$ and $$$y = 7$$$ there are four possible outcomes after this operation:   $$$x = 0$$$, $$$y = 6$$$;  $$$x = 0$$$, $$$y = 8$$$;  $$$x = -1$$$, $$$y = 7$$$;  $$$x = 1$$$, $$$y = 7$$$.   Pay $$$b$$$ dollars and increase or decrease both integers by $$$1$$$. For example, if $$$x = 0$$$ and $$$y = 7$$$ there are two possible outcomes after this operation:   $$$x = -1$$$, $$$y = 6$$$;  $$$x = 1$$$, $$$y = 8$$$.  Your goal is to make both given integers equal zero simultaneously, i.e. $$$x = y = 0$$$. There are no other requirements. In particular, it is possible to move from $$$x=1$$$, $$$y=0$$$ to $$$x=y=0$$$.Calculate the minimum amount of dollars you have to spend on it.

Input: The first line contains one integer $$$t$$$ ($$$1 \le t \le 100$$$) — the number of testcases.The first line of each test case contains two integers $$$x$$$ and $$$y$$$ ($$$0 \le x, y \le 10^9$$$).The second line of each test case contains two integers $$$a$$$ and $$$b$$$ ($$$1 \le a, b \le 10^9$$$).

Output: For each test case print one integer — the minimum amount of dollars you have to spend.

Note: In the first test case you can perform the following sequence of operations: first, second, first. This way you spend $$$391 + 555 + 391 = 1337$$$ dollars.In the second test case both integers are equal to zero initially, so you dont' have to spend money.

Sample Inputs:
2
1 3
391 555
0 0
9 4

Sample Outputs:
1337
0

Solution (Python):
n = []
for i in range(int(input())):
    (x, y) = map(int, input().split())
    (a, b) = map(int, input().split())
    if x == 0 and y == 0:
        n.append(0)
    elif x == 0 or y == 0:
        n.append(x * a if y == 0 else y * a)
    else:
        onab = min(x, y) * b + (max(x, y) - min(x, y)) * a
        ona = (x + y) * a
        n.append(onab) if onab <= ona else n.append(ona)
for i in n:
    print(i)

Solution (Python):
t = int(input())
res = []
for i in range(t):
    (x, y) = map(int, input().split())
    (a, b) = map(int, input().split())
    if x > y:
        (x, y) = (y, x)
    if b <= 2 * a:
        res.append(x * b + (y - x) * a)
    else:
        res.append((x + y) * a)
for i in res:
    print(i)

Solution (Python):
t = int(input())
for testcase in range(t):
    (x, y) = [int(x) for x in input().split()]
    (a, b) = [int(x) for x in input().split()]
    method1 = (x + y) * a
    method2 = min(x, y) * b + (max(x, y) - min(x, y)) * a
    print(min(method1, method2))