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;
}