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