整数分块做法求调,1关
查看原帖
整数分块做法求调,1关
1100149
mountain_climber楼主2024/10/14 14:23
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int inf=2e18;
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL),cout.tie(NULL);
    int t;
    cin>>t;
    while(t--){
        int a,b;
        cin>>a>>b;
        int ans=inf;
        if(a>b){
            cout<<a-b<<'\n';
            return 0;
        }
        for(int i=1;i<=b/i;i++){
            if(b%i==0){
                if(i-a>=0){
                    ans=min(ans,i-a);
                }
                if(b/i-a>=0){
                    ans=min(ans,b/i-a);
                }
            }
        }
        int l=1,r;
        for(l=1;l<=b;l=r+1){
            r=b/(b/l);
            if(l>=a){
                ans=min(ans,(l-a)+l-b+l*(b/l));
            }
            if(r>=a){
                ans=min(ans,(r-a)+r-b+r*(b/r));
            }
        }
        int pos=0;
        for(int i=1;i<=b;i++){
            if(i>=a){
                ans=min(ans,(i-a)+i-b+i*(b/i));
                pos=i;
            }
        }
        cout<<pos<<'\n';
        cout<<ans<<'\n';
    }
    return 0;
}
2024/10/14 14:23
加载中...