Smilo and Monsters (Codeforces 1891C)
Tags: Greedy, two pointers

A boy called Smilo is playing a new game! In the game, there are $$$n$$$ hordes of monsters, and the $$$i$$$-th horde contains $$$a_i$$$ monsters. The goal of the game is to destroy all the monsters. To do this, you have two types of attacks and a combo counter $$$x$$$, initially set to $$$0$$$:  The first type: you choose a number $$$i$$$ from $$$1$$$ to $$$n$$$, such that there is at least one monster left in the horde with the number $$$i$$$. Then, you kill one monster from horde number $$$i$$$, and the combo counter $$$x$$$ increases by $$$1$$$.  The second type: you choose a number $$$i$$$ from $$$1$$$ to $$$n$$$, such that there are at least $$$x$$$ monsters left in the horde with number $$$i$$$. Then, you use an ultimate attack and kill $$$x$$$ monsters from the horde with number $$$i$$$. After that, $$$x$$$ is reset to zero.Your task is to destroy all of the monsters, meaning that there should be no monsters left in any of the hordes. Smilo wants to win as quickly as possible, so he wants to the minimum number of attacks required to win the game. 

Input: The first line contains a single integer $$$t$$$ ($$$1 \leq t \leq 10^4$$$) — the number of test cases. The descriptions of the test cases follow.The first line of each input data set contains a single integer $$$n$$$ ($$$1 \leq n \leq 2 \cdot 10^5$$$) — the number of hordes of monsters.The second line contains $$$n$$$ integers $$$a_1, a_2, \ldots, a_n$$$ ($$$1 \leq a_i \leq 10^9$$$) — the number of monsters in each horde.It is guaranteed that the sum of $$$n$$$ across all test cases does not exceed $$$2 \cdot {10^5}$$$.

Output: For each test case, out put the minimum number of attacks required to kill all monsters.

Note: In the first test case, we can use an attack of the first type on the $$$1$$$-st, $$$3$$$-rd and $$$4$$$-th hordes, and then use an attack of the second type to finish off the $$$2$$$-nd horde. We need $$$4$$$ attacks in total.In the second test case, we can use an attack of the first type on the $$$1$$$-st and $$$3$$$-rd hordes, then use an attack of the second type to finish off the $$$2$$$-nd horde, and then use an attack of the first type on the $$$4$$$-th horde. We need $$$4$$$ attacks in total.In the fourth test case, we can use an attack of the first type once on the $$$1$$$-st horde, twice on the $$$2$$$-nd horde, and then use an attack of the second type on the $$$2$$$-nd horde, and finally use an attack of the first type to finish off the $$$2$$$-nd horde. We need $$$5$$$ attacks in total.

Sample Inputs:
4
4
1 3 1 1
4
1 2 1 1
6
3 2 1 5 2 4
2
1 6

Sample Outputs:
4
4
11
5

Solution (Python):
import sys

def solve():
    n = int(input())
    a = list(map(int, input().split()))
    s = sum(a)
    ans = s + 1 >> 1
    s >>= 1
    if s > 0:
        a.sort(reverse=True)
        for i in range(n):
            s -= a[i]
            if s <= 0:
                ans += i + 1
                break
    print(ans)

def main():
    t = int(input())
    while t > 0:
        t -= 1
        solve()
if __name__ == '__main__':
    main()

Solution (Python):
for _ in range(int(input())):
    n = int(input())
    a = list(map(int, input().split()))
    a.sort()
    sm = sum(a)
    half = sm // 2
    x = 0
    i = n - 1
    while half > 0:
        half -= a[i]
        x += 1
        i -= 1
    print(sm // 2 + x + sm % 2)

Solution (Python):
for _ in range(int(input())):
    n = int(input())
    a = list(map(int, input().split()))
    a = sorted(a)
    x = 0
    y = 0
    j = n
    b = sum(a)
    c = b // 2
    while c > 0:
        j -= 1
        c -= a[j]
    print((b + 1) // 2 + n - j)