P16342

· · 题解

注意到把 b 变成 1 或者 a 一定合法,故答案不大于 b - 1,最终的 b' 不大于 \min(2b - 1, a)

枚举 b',则 a 需要变成最接近的 b' 的倍数,二者之差为 \min(a \bmod b', b' - a \bmod b')

#include <bits/stdc++.h>
using namespace std;
int main()
{
    freopen("adjust.in", "r", stdin);
    freopen("adjust.out", "w", stdout);
    long long a, b, c = LLONG_MAX;
    cin >> a >> b;
    for (int i = 1; i <= min(2 * b, a); i++)
        c = min(c, abs(i - b) + min(a % i, i - a % i));
    cout << c << endl;
    return 0;
}