This is the question from a recent online assessment by a company. Need your help in solving it, thank you for your time!
Problem Statement
Alice and Bob are playing a game in a town with houses arranged in a straight line. Houses are numbered from 1 to N.
Alice is standing at house x, and Bob is standing at house y . Each minute, Alice and Bob can decide individually to either move to the next house on the left (if they are not already at the first house), move to the next house on the right (if they are not already at the last house), or stay at their current house.
The goal of the game is for Alice and Bob to ensure that every house in the town is visited by at least one of them. Your task is to determine the minimum number of minutes required for Alice and Bob to achieve this goal in several games.
Input format
The first line of input contains one integer t, the number of games.
The next t lines describe each game and contain three integers n, x and y, the number of houses in the town, Alice's starting position, and Bob's starting position, respectively.
The combined length of all arrays (10^6 (∑n ≤ 10^6)) does not exceed 10^6.
Constraints
1 <= t <= 2.10^4
2 ≤ n ≤ 10^6; 1 ≤ x, y ≤n; x≠y
Output format:
- For each game, print one integer the minimum number of minutes required for Alice and Bob to visit every house in the town.
Example 1
1
993
Output
4
Explanation
Total number of houses are 9
Alice is at 9th house and Bob is at 3rd house
1st min -> Alice moves to left 8th position, Bob moves to right 4th position
2nd min -> Alice moves to left 7th position, Bob moves to 3rd position
3rd min -> Alice moves to 6th position, Bob to 2nd
4th min -> Alice moves to 5th position, Bob to 1st
Edit: The above solution is wrong.
Edit 2:
Correct solution (as of now) by mrxaid









let a be the number of houses left to the left person,
b be the number of houses right to the right person,
and c be the number of houses in between those 2
if(a+c+c>b) return b
if(b+c+c>a) return a
return min( ceil((a+b+c+c)/2) , ceil((4b+2c+a)/3) , ceil((b+2c+4a)/3) , ceil((2a+2b+c)/2) )
each expression is related to some scenario
Let's assume that x<y, then the image of the scenario can be drawn like this, ---(Left)---A----(Middle)----B----(Right)---- we know that Alice will take care of the left houses and Bob will take care of the right houses. The only thing we can do is to find the number of middle houses such that maximum time taken by Alice and Bob is minimum. To do this, we can simply iterate from 0 to "number of the middle houses" and find out the minimum time taken.
mid = number of middle house
minimum_total_time = INT_MAX
for i 0 to mid
time_taken_by_Alice = 2*min(i , left) + max(i , left);
time_taken_by_Bob = 2*min(mid-i , right) + max(mid-i,right);
minimum_total_time = min(minimum_total_time , time_taken_by_Alice + time_taken_by_Bob)
you should do, min_tot_time = min(min_tot_time, max(alice,bob)), instead of adding them up
1488C - Two Policemen Here is the question, if anyone is still searching