Codeforces Round #624 (Div. 3) D - Three Integers (枚举)

🤕 🤕 🤕
枚举B,这样A就是B的因子,C可以根据常识算出,枚举B的时候记得把范围扩大一点,不然会被hack(指了指自己)

void solve()
{
    int a,b,c;cin>>a>>b>>c;
    int ans=-1,x=a,y=b,z=c;
    for(int i=1;i<=20000;++i)
    {
        int tmp=abs(b-i);
        int tag=-1;
        int xx=a,yy=i,zz=c;
        for(int j=1;j*j<=i;++j)//xx
        {
            if(i%j==0)
            {
                if(tag==-1||abs(a-j)<tag) tag=abs(a-j),xx=j;
                if(tag==-1||abs(a-i/j)<tag)  tag=abs(a-i/j),xx=i/j;
            }
        }
        tmp+=tag;
        //zz
        if(c<i) tmp+=i-c,zz=i;
        else if(c>i)
        {
            if(c-c/i*i<(c/i+1)*i-c) zz=c/i*i;
            else zz=(c/i+1)*i;
            tmp+=min(c-c/i*i,(c/i+1)*i-c);
        }
        if(ans==-1||tmp<ans) x=xx,y=yy,z=zz,ans=tmp;
    }
    cout<<ans<<endl;
    cout<<x<<" "<<y<<" "<<z<<endl;
}
signed main()
{
    fast;
    int T=1;cin>>T;
    while(T--) solve();
    return 0;
}

posted @ 2020-02-25 10:31  Herlo  阅读(235)  评论(1编辑  收藏  举报