CF1605A A.M. Deviation
洛谷题面
题目大意
给定三个数 \(a,b,c\),每次操作可以选择两个数分别进行 +1
和 -1
操作。
问至少多少次操作可以使得 \(|a+c-2b|\) 最小。
题目分析
令 \(f(a,b,c)=|a+c-2b|\)。
显然,如果让 \(a,c\) +1
或 -1
,答案不会改变,一定不是最优解,所以分类讨论:
-
\(f(a+1,b-1,c)=|a+1+c-2\times(b-1)|=|a+c-2b+3|\)。
-
\(f(a-1,b+1,c)=|a-1+c-2\times(b+1)|=|a+c-2b-3|\)。
-
\(f(a,b+1,c-1)=|a+c-1-2\times(b+1)|=|a+c-2b-3|\)。
-
\(f(a,b-1,c+1)=|a+c+1-2\times(b-1)|=|a+c-2b+3|\)。
\(\therefore\) 综上,经过一次操作后会与上次操作结果相差 \(3\)。
\(\boxed{\texttt{结论:经过多次操作后,答案一定为 1 或 0。}}\)
证明:
如果经过多次操作后,当前为最优解,且 \(a,b,c\) 中有两个数之差大于等于 \(2\)。
那么将其进行几次 +3
或 -3
操作后,答案一定会更小。
这与当前为最优解矛盾,所以结论成立。
所以我们只需要判断 \(a+c-2b\) 的结果是否是 \(3\) 的倍数即可。
代码
while T--:
in(a),in(b),in(c);
if (a+c-2*b)%3==0:
print(0)
else:
print(1)