Problem of the day
You are given 'N' numbers and you have to play a game using them. In one move you have to pick any two numbers 'A' and 'B' and replace them by their sum 'A+B'. Doing this gives you a penalty of 'A+B'. Note that the count of elements reduces by 1 every time you take 2 numbers and replace them by their sum. The game ends when there is only one element left. Your task is to minimise the penalty during the game.
You need to return the minimum possible penalty you can have when the game ends.
The first line of input contains an integer 'T' denoting the number of queries or test cases.
The first line of every test case contains an integer 'N' denoting the count of numbers.
The second line of every test case contains 'N' single space-separated integers representing the numbers given to you initially.
Output format:
For each test case, return the minimum possible penalty in a separate line.
Note:
You do not need to print anything, it has already been taken care of. Just implement the given function.
1 <= T <= 5
1 <= N <= 10^5
1 <= X[i] <= 10^6
Time limit: 1 second
1
4
2 3 1 4
19
To achieve the minimum penalty,
First, we pick 1 and 2, replace it by 3. We get { 3, 3, 4}
Second, we pick 3 and 3, replace it by 6. We get {4, 6}
Third, we pick 4 and 6, replace it by 10. We get {10}
The minimum penalty will be 3 + 6 + 10 = 19.
1
5
7 6 5 5 3
60
We can observe that when it comes to minimising the penalty. This can be done by considering the 2 smallest numbers every time. This can be done by repeatedly picking up 2 smallest numbers and replacing them with their sum.
O(N^2), where ‘N’ is the total numbers given initially.
In the worst case, for ‘N - 1’ number of times, we are picking out 2 smallest numbers in O(N) time, removing them from the array in O(N) time and adding the sum of numbers into the array.
O(1) .
In the worst case, only constant space is required.