--- title: "Codeforces Round 624 (Div. 3) D(枚舉+剪枝)" tags: 題解, 枚舉, 數學 --- https://codeforces.com/contest/1311/problem/D #### 題意 給 $a, b, c$ 三個數,滿足 $a<=b<=c$。每次操作可以選一個數+1或-1,求最少操作次數使得最後的三個數 $A, B, C$ 滿足 $A$ 可以整除 $B$、$B$ 可以整除 $C$。 #### 思路 首先 $A$ 只會在 $[1, 2a]$ 的範圍,超過的話不如直接選 $1$;$B$ 也只會在 $[1, 2A]$,且同時必須是 $A$ 的倍數;$C$ 只要在 $B$ 確定後選擇最近的 $B$ 的倍數,可在 $O(1)$ 得到。 #### Code ```python=1 def solve(): A, B, C = map(int, input().split()) mind = INF abc = (A, B, C) for a in range(1, 2 * A + 1): for b in range(a, 2 * B + 1, a): c1 = (C // b) * b c2 = (C // b + 1) * b if abs(A - a) + abs(B - b) + abs(C - c1) < mind: mind = abs(A - a) + abs(B - b) + abs(C - c1) abc = (a, b, c1) if abs(A - a) + abs(B - b) + abs(C - c2) < mind: mind = abs(A - a) + abs(B - b) + abs(C - c2) abc = (a, b, c2) print(mind) print(*abc) if __name__ == "__main__": for i in range(int(input())): solve() ```