CF-Round#624-div3-D题
D. Three Integers
题目大意:给你三个数,可以对这三个数进行+1或者-1操作。问使得(B%A == 0) && (C%B == 0)的最小操作次数
数学题,思维。暴力
枚举
枚举从1~2A的数字。因为不可能大于2A嘛。。大于2A的话可以直接把A置1.操作步骤更小。
然后枚举A的倍数。同样这个倍数也不可能大于2B,如果大于的话也可以直接置1.一样的道理
最后求C。
这时候的C是B的倍数
我们找到一个B的倍数最接近C的
要么就是(C/B)*B(这个地方可能为0)所以还有一种情况(C/B)*B+B这种可能。
然后求一下操作次数。
维护最小值即可。
代码部分:
#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9 + 10;
int t;
int a, b, c;
int ansa, ansb, ansc;
int main()
{
cin >> t;
while (t--)
{
cin >> a >> b >> c;
int ans = INF;
for (int ta = 1; ta <= 2 * a; ta++)
{
for (int tb = ta; tb <= 2 * b; tb += ta)
{
for (int i = 0; i < 2; i++)
{
int tc = (c / tb) * tb + i * tb;
int t = abs(ta - a) + abs(tb - b) + abs(tc - c);
if (ans > t)
{
ans = t;
ansa = ta;
ansb = tb;
ansc = tc;
}
}
}
}
cout << ans << endl;
cout << ansa << " " << ansb << " " << ansc << endl;
}
return 0;
}