Contest3125 - 2021级新生个人训练赛第27场_问题 F: 兔子

//

问题 F: 兔子
时间限制: 1.000 Sec  内存限制: 128 MB
 
题目描述
从左往右有100000001个整数点,分别是整数点0至整数点100000000。有n只兔子,第i只兔子在整数点d[i]。你需要选择一个整数点作为喂食点,所有兔子都要走到这个整数点进食。应该如何选择喂食点,才能使得所有兔子走过的总路程最小?输出最小的总路程。
输入
第一行,一个整数。1<=n<=20。
第二行,共n个整数,第i个整数是d[i]。0<=d[i]<=100000000。
输出
一个整数
样例输入 Copy
【样例1】
3
5 9 1
【样例2】
4
5 9 1 8
样例输出 Copy
【样例1】
8
【样例2】
11
提示
对于60%的数据, 1<=n<=3且0<=d[i]<=10。
对于80%的数据, 1<=n<=10且0<=d[i]<=100。

//
题意:找到一个整数点 使得兔子前往这个点的总距离最短
//
题解:
01 不是简单的求 最大值和最小值之间的中值
02 经 举例归纳 验证:
    当兔子个数为 奇数时 走到最中间兔子的位置 总距离最短
    当兔子个数为 偶数时 最中间两个兔子之间的任意位置(包括他们本身) 总距离最短

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

int main()
{   
    int a[30];
    int n,i,mid,sum;

    while( ~scanf("%d",&n) )
    {
        for( i=0;i<n;i++ ) scanf("%d",&a[i]);

        // 排序 找到中间值
	    sort( a,a+n );

        // n/2 ( 下标 )
        // eg. 0 1 2 3      __4/2=2;
        // eg. 0 1 2 3 4    __5/2=2;
	    mid=a[ n/2 ];
	
	    sum=0;
	    for( i=0;i<n;i++ )
	    {
            // abs函数 求整数的绝对值
	        sum+=abs( mid-a[i] );
	    }
	    printf("%d\n",sum);
	}
	
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_63173957/article/details/122592420#comments_21028443