Arrays would do.
Given Attacking power and shield power of N soldiers standing in a circle in order, labeled from 1 to N such that soldier N is to the left to soldier 1. When the king commands, each soldier may attack one of the soldiers standing adjacent to it at once. King asks to find out the most powerful shield of the soldier which is guaranteed to survive irrespective of the soldiers being attacked. A soldier survives if its defense shield power is strictly greater than the attack applied on him. Print -1, if no soldier is guaranteed to survive.
- In the worst case for each soldier, both of the adjacent soldiers might choose to attack him, in which case, the attack applied on him is the sum of attacking power of both soldiers attacking the current soldier.
- So, a soldier survives in the worst case only if the power of his defence shield is greater than the sum of attacking power of two adjacent soldiers. Out of all surviving soldiers, the power of most powerful shield is the required shield power here.
First of all, understand the worst case for any soldier. If considering soldier x, both soldiers labeled x-1 and x+1 may choose to attack him. In this case, Attack applied on him shall be sum of attacking powers of soldiers x-1 and x+1.
Now, Since we need to guarantee that the soldier survives, we shall only choose the shield of a soldier whose defense shield is powerful than the sum of attacking power of adjacent soldiers. Since we want to find the most powerful shield, we may offer to the king, the shield with maximum power out of all these shields.
For implementation, we can just make two arrays A and D and check D[i] > A[i-1]+A[i+1] and take maximum value of D[i] here. Don’t forget to consider that solder N and soldier 1 are adjacent too.
In this problem, there are N soldiers and given M pairs of soldiers which may attack each other, find out the best shield to be offered to king. The condition is same. If the chosen soldier doesn’t survive, you, the deputy of Chef die a painful death.
Time complexity is O(N) per test case.
AUTHOR’S AND TESTER’S SOLUTIONS:
Feel free to Share your approach, If it differs. Suggestions are always welcomed.