暴力- D. Three Integers

昨晚打了一场CF  来补一个D题  https://codeforces.com/contest/1311/problem/D

原来是个暴力

t组数据  输入 a b c

然后求一组  A B C 使得abs(A-a)+abs(B-b) + abs(C-c)最小

做法就是拿set存储每一个可以整除它的数,直接暴力,

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

const int maxn=2e4+5; 
set<int>s[maxn];
 
int main()
{
    for(int i=1;i<=20000;i++)//存因子
    {
        for(int j=1;j*j<=i;j++)
        {
            if(i%j==0)
            {
                s[i].insert(j);
                s[i].insert(i/j);
            }
        }
    }
    int t,a,b,c,l,r,ans,n1,n2,n3,a0,b0,c0; 
    cin>>t;
    while(t--)
    {
        n1=n2=n3=0;
        ans=3*maxn;
        scanf("%d %d %d",&a,&b,&c);
//        l=max(1,c-b);//缩小c的可能范围(不缩小暴力1~2e4也行)
//        r=c+b;
        for(int i=1;i<=20000;i++)
        {
            n3=abs(c-i);//c移动次数
            for(auto it=s[i].begin();it!=s[i].end();it++)
            {
                n2=abs(b-*it);//b移动次数
                for(auto iit=s[*it].begin();iit!=s[*it].end();iit++)
                {
                    n1=abs(a-*iit);//a移动次数
                    if(n1+n2+n3<ans)
                    {
                        ans=n1+n2+n3;
                        a0=*iit;
                        b0=*it;
                        c0=i;
                    }
                }
            }
        }
        cout<<ans<<endl;
        printf("%d %d %d\n",a0,b0,c0);
    }
    return 0;
}

 

posted @ 2020-02-25 21:03  SunCY  阅读(366)  评论(0编辑  收藏  举报