列表

详情


NC205236. 牛客蚂蚁三兄弟

描述

在一条细毛线上,趴着三只蚂蚁(细毛线视为直线)。三只蚂蚁都有一个初始位置,现在蚂蚁们都想离自己的兄弟近一点,但蚂蚁只能在这个细线上移动。问:能否使蚂蚁最多移动一次(即:蚂蚁可以向左移动或向右移动或者不动),
使三只蚂蚁距离的和最小。

输入描述

先输入一个数n(1<=n<=1000),表示有n组数据;
接下来的n行,每行输入三个数a,b,c(1<=a,b,c<=10^9)表示蚂蚁们的初始位置;

输出描述

输出一个数,表示三个蚂蚁距离之和的最小值。

示例1

输入:

4
3 3 4
10 20 30
5 5 5
2 4 3

输出:

0
36
0
0

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C(clang 3.9) 解法, 执行用时: 3ms, 内存消耗: 476K, 提交时间: 2020-04-18 10:38:03

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
int cmp ( const void *a , const void *b )
{

  return *(int *)a - *(int *)b;
}
int main()
{
  int n;
  int i;
  long long a[2],sum=0;
  scanf("%d",&n);
  for(i=1;i<=n;i++)
  {
      scanf("%lld %lld %lld",&a[0],&a[1],&a[2]);
      qsort(a,3,sizeof(a[0]),cmp);
      sum=a[2]-a[1]+a[1]-a[0]+a[2]-a[0];
      if(sum-4<=0)
        printf("0\n");
      else
        printf("%lld\n",sum-4);
  }
}

C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 504K, 提交时间: 2020-04-18 09:30:05

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
	int n, a[3];
	long long ans;
	scanf("%d",&n);
	while(n--){
		scanf("%d %d %d",&a[0],&a[1],&a[2]);
		sort(a,a+3);
		ans = 2*(a[2]-a[0]);
		if(ans<=4)
			ans = 0;
		else
			ans -= 4;
		printf("%lld\n",ans);
	}
	return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 4ms, 内存消耗: 496K, 提交时间: 2020-04-18 09:48:29

#include<cstdio>
#include<cmath>
#include<cstring>
int main(){
	int n;
	int a,b,c;
	long long sum=0;
	scanf("%d",&n);
	while(n--){
		scanf("%d%d%d",&a,&b,&c);
		sum=fabs(a-b)+fabs(a-c)+fabs(b-c);
		sum-=4;
		if(sum<0){
			sum=0;
		}
		printf("%lld\n",sum);
	}
}

上一题