---
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()
```