CF-Round#624-div3-D题

CF-Round#624-div3-D题

D. Three Integers

传送门

题目大意:给你三个数,可以对这三个数进行+1或者-1操作。问使得(B%A == 0) && (C%B == 0)的最小操作次数

数学题,思维。暴力
枚举
枚举从1~2A的数字。因为不可能大于2A嘛。。大于2A的话可以直接把A置1.操作步骤更小。
然后枚举A的倍数。同样这个倍数也不可能大于2
B,如果大于的话也可以直接置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;
}
发布了112 篇原创文章 · 获赞 3 · 访问量 2634

猜你喜欢

转载自blog.csdn.net/qq_44624316/article/details/104969344
今日推荐