A, B, S = map(int, input().split()) def get_candidate_down(A_floor, B_floor, S_floor): candidates = [] # A is always a candidate a_dist = abs(A_floor - S_floor) candidates.append(('A', a_dist)) # B is a candidate only if S is not 1 if S_floor != 1: if B_floor >= S_floor: b_dist = B_floor - S_floor else: b_dist = S_floor - B_floor candidates.append(('B', b_dist)) # Find the candidate with minimum distance, A has priority in case of tie min_dist = min([d for _, d in candidates]) filtered = [e for e, d in candidates if d == min_dist] if 'A' in filtered: return 'A' else: return 'B' if filtered else 'A' def get_candidate_up(A_floor, B_floor, S_floor): candidates = [] # Calculate distance for A if A_floor <= S_floor: a_dist = S_floor - A_floor else: a_dist = A_floor - S_floor candidates.append(('A', a_dist)) # Calculate distance for B if B_floor <= S_floor: b_dist = S_floor - B_floor else: b_dist = B_floor - S_floor candidates.append(('B', b_dist)) # Find the candidate with minimum distance, A has priority in case of tie min_dist = min([d for _, d in candidates]) filtered = [e for e, d in candidates if d == min_dist] if 'A' in filtered: return 'A' else: return 'B' def compute_cost(elevator, A_floor, B_floor, S_floor): if elevator == 'A': return abs(A_floor - S_floor) + S_floor else: # Check if B can reach A's current floor (A_floor must be >=1) if A_floor == 0: return float('inf') else: return abs(B_floor - S_floor) + abs(S_floor - A_floor) + A_floor # Calculate for down button elevator_down = get_candidate_down(A, B, S) cost_down = compute_cost(elevator_down, A, B, S) # Calculate for up button elevator_up = get_candidate_up(A, B, S) cost_up = compute_cost(elevator_up, A, B, S) min_cost = min(cost_down, cost_up) print(min_cost)