疾风剑豪我最强

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]));
                }
        }
}
View Code

posted on 2020-01-13 21:29  疾风剑豪我最强  阅读(207)  评论(0编辑  收藏  举报

导航