Summation Game (Codeforces 1920B)
Tags: Greedy, games

Alice and Bob are playing a game. They have an array $$$a_1, a_2,\ldots,a_n$$$. The game consists of two steps:  First, Alice will remove at most $$$k$$$ elements from the array.  Second, Bob will multiply at most $$$x$$$ elements of the array by $$$-1$$$. Alice wants to maximize the sum of elements of the array while Bob wants to minimize it. Find the sum of elements of the array after the game if both players play optimally.

Input: Each test consists of multiple test cases. The first line contains a single integer $$$t$$$ ($$$1 \leq t \leq 10^4$$$) — the number of test cases. The description of the test cases follows.The first line of each test case contains three integers $$$n$$$, $$$k$$$, and $$$x$$$ ($$$1 \leq n \leq 2 \cdot 10^5$$$, $$$1 \leq x,k \leq n$$$) — the number of elements in the array, the limit on the number of elements of the array that Alice can remove, and the limit on the number of elements of the array that Bob can multiply $$$-1$$$ to.The second line of each test case contains $$$n$$$ integers $$$a_1, a_2,\ldots, a_n$$$ ($$$1 \leq a_i \leq 1000$$$) — the elements of the array.It is guaranteed that the sum of $$$n$$$ over all test cases does not exceed $$$2 \cdot 10^5$$$. 

Output: For each test case, output a single integer — the sum of elements of the array after the game if both players play optimally.

Note: In the first test case, it is optimal for Alice to remove the only element of the array. Then, the sum of elements of the array is $$$0$$$ after the game is over.In the second test case, it is optimal for Alice to not remove any elements. Bob will then multiply $$$4$$$ by $$$-1$$$. So the final sum of elements of the array is $$$3+1+2-4=2$$$.In the fifth test case, it is optimal for Alice to remove $$$9, 9$$$. Bob will then multiply $$$5, 5, 3$$$ by $$$-1$$$. So the final sum of elements of the array is $$$-5-5-3+3+3+2=-5$$$.

Sample Inputs:
8
1 1 1
1
4 1 1
3 1 2 4
6 6 3
1 4 3 2 5 6
6 6 1
3 7 3 3 32 15
8 5 3
5 5 3 3 3 2 9 9
10 6 4
1 8 2 9 3 3 4 5 3 200
2 2 1
4 3
2 1 2
1 3

Sample Outputs:
0
2
0
3
-5
-9
0
-1

Solution (Python):
def solve():
    (n, k, x) = map(int, input().split())
    a = list(map(int, input().split()))
    a.sort(reverse=True)
    s = sum(a)
    for i in range(x):
        s -= a[i] * 2
    m = s
    for i in range(k):
        s += a[i]
        if i + x < n:
            s -= a[i + x] * 2
        m = max(m, s)
    print(m)

def main():
    n = int(input())
    for _ in range(n):
        solve()
if __name__ == '__main__':
    main()

Solution (Python):
import sys
input = sys.stdin.readline

def readList():
    return list(map(int, input().split()))

def readInt():
    return int(input())

def readInts():
    return map(int, input().split())

def readStr():
    return input().strip()

def solve():
    (n, k, x) = readInts()
    a = readList()
    a.sort(reverse=True)
    (rs, S) = (sum(a[:x]), sum(a))
    ans = S - 2 * rs
    j = x
    for i in range(k):
        S -= a[i]
        rs -= a[i]
        if j < n:
            rs += a[j]
            j += 1
        ans = max(ans, S - 2 * rs)
    return ans
for _ in range(int(input())):
    print(solve())

Solution (Python):
import math

def solve():
    (n, k, x) = map(int, input().split())
    a = sorted(map(int, input().split()), reverse=True)
    s = sum(a)
    for i in range(x):
        s -= a[i] * 2
    ans = s
    for i in range(k):
        s += a[i]
        if i + x < n:
            s -= a[i + x] * 2
        ans = max(ans, s)
    print(ans)
if __name__ == '__main__':
    t = 1
    t = int(input())
    for i in range(t):
        solve()