题解:P16342 [科大国创杯初中组 2026] 倍数调整

· · 题解

赛时解法。

考虑先做 b=1,得出答案始终为 0

x 为输入数据,b=x 修改至 b^{\prime}=1 的代价为 b-1,是上界答案。

因此,b=x 要修改 b^{\prime} \ge 2b 的解一定劣,因为代价至少为 b

注意特判 a<b,否则可能会改出 a^{\prime}=0 的非法解。

#include <bits/stdc++.h>
using namespace std;

int main(){
    //freopen...
    long long a;
    long long b;
    long long minn=1e10;
    cin>>a>>b;
    if(b==1){cout<<0;return 0;}
    if(a<=b){cout<<b-a;return 0;}
    for(int i=1;i<=b*2;i++){
        long long s;
        s=min(a%i,i-a%i)+abs(b-i);
        minn=min(s,minn);
    }
    cout<<minn;
    return 0;
}