Problem of the day
Alex has a computer with ‘K’ memory spaces. He has a list of ‘N’ different document downloads that he would like to do, each of which consumes some unique memory usage. He also has ‘M’ computer games, each of which consumes some unique memory usage. His computer can allow at most one download and at most one game to run simultaneously, provided that the sum of memory usages doesn’t exceed ‘K’. Alex wants to play at most one game and complete at most one download so that the total memory usage is maximum.
Given a list ‘download’ and a list ‘game’, help Alex find out the number of pairs of downloads and games such that the sum of memory usages is maximum. It can also be possible that Alex only plays a game or performs a download at a time.
The first line of input contains an integer ‘T’, denoting the number of test cases. Then the test cases follow.
The first line of each test case contains three space-separated integers, ‘N’, ‘M’ and ‘K’, denoting the number of downloads and games and the total memory available, respectively.
The second line of each test case contains ‘N’ space-separated integers denoting the memory usages of downloads in the array ‘download’.
The third line of each test case contains ‘M’ space-separated integers denoting the memory usages of games in the array ‘game’.
Output Format:
For each test case, print an array ‘result’, denoting the pairs of downloads and games for maximum memory usage in the following format.
result[i] = [ind1, ind2], where ind1 is the index of the download chosen and ind2 is the index of the game selected. If only one game or one download is chosen, put the other index as ‘-1’. In case no options are available, print ‘-1 -1’.
Note:
You are not required to print the expected output. It has already been taken care of. Just implement the function.
1 <= T <= 10
1 <= N, M <= 10^5
1 <= K <= 10^9
1 <= game[i], download[i] <= 10^6
Time Limit: 1 sec
2
6 7 6
1 7 2 4 5 6
2 3 4 1 5 8 10
4 3 8
2 1 5 9
9 2 4
0 4
2 2
3 0
4 3
5 -1
2 1
In test case one, if we check the pairs, we can see that the maximum permitted memory that we can use is 6. The pairs (0, 4), (2, 2), (3, 0), and (4, 3) sum up to 6 memory usages. Also, download number 5 will alone consume 6 memory. So, pair (6, -1) is also valid.
In test case two, the maximum permitted memory usage is 7. Only pair (2, 1) sum up to 7 memory usages.
3
2 3 4
1 3
3 1 10
5 6 2
1 3 5 7 9
1 3 5 7 9 11
1 3 5
3
1 2 3
0 0
1 1
0 0
0 1
Can you check all possible pairs to come up with the optimal pairs?
Firstly, we will check all the possible pairs exhaustively to find out the maximum permitted memory usage. Then, we will insert all optimal pairs into an array and return it.
The steps are as follows:
O(N*M), where N is the length of the array ‘download’ and M is the length of the array ‘game’.
We are checking all downloads. And for each download; we are checking each game. Thus, the overall time complexity is O(N*M).
O(N), where ‘N’ is the length of the array ‘download’.
As we are using an array to store results. There can be a maximum of ‘N’ pairs (we have assumed N < M). Hence, the total space complexity is O(N).