A - Three Friends
题意:在一个坐标轴上,有三个点,每个点至多可移动一次至多移动一个位置,要使三个点的距离之和最小。
思路:肯定是越往中间数靠,三者之间的距离会越小。
#include<stdio.h> #include<algorithm> #include<math.h> using namespace std; int main(){ int q,a[5],i; while(~scanf("%d",&q)){ while(q--){ for(i=0;i<3;i++){ scanf("%d",&a[i]); } sort(a,a+3); if(a[0]==a[1]&&a[2]>a[1]){ a[0]++; a[1]++; if(a[1]!=a[2]){ a[2]--; } }else if(a[1]==a[2]&&a[1]>a[0]){ a[1]--; a[2]--; if(a[0]!=a[1]){ a[0]++; } }else{ if(a[0]<a[1]) a[0]++; if(a[2]>a[1]) a[2]--; } printf("%d\n",abs(a[0]-a[1])+abs(a[0]-a[2])+abs(a[1]-a[2])); } } }