cust 30 葫芦屯小学军训

葫芦屯小学军训
描述
这几天,葫芦屯小学对全校同学进行军训,阿杰由于上次女厕所事件的良好表现,得到了现任大队长的青睐,加入了队伍,成为了一道杠小干事。所以,阿杰不用像别的同学一样在操场训练,但是,作为组织的人,他要在这期间内担任志愿者。由于阿杰长相英俊,气宇轩昂,小小年纪就散发着一种让众生倾倒的气质,大队长派他去女生方队进行志愿服务。

方队解散后,女生们都会在坐成了一排,其中有些女生要求服务(什么服务?小孩子不能想太多哦~),阿杰会从驻点(存放物资的地方)拿必要物资出发,走到某个女生面前提供者服务,但是每次为一个女生服务完后,阿杰都要回到自己的驻点拿必要的服务物资。阿杰的体力也是有限的,所以阿杰要在女生们坐的那一长排中选择一个较好位置作为驻点,使得他最终所走的总距离尽量小。

请你告诉阿杰,选择了某个驻点后,他为所有女生提供服务回到驻点后“最少”一共要走多远的距离。

阿杰能否顺利完成任务,从此平步青云就看你的了。注意,阿杰的初始位置在驻点。

输入
输入有多组 每组第一行输入一个n代表需要服务的女生的数目 第二行输入n(0 \le n \le 1000)n(0≤n≤1000)个数 a_i(0 \le a_i \le 10^9)a
i
​ (0≤a
i
​ ≤10
9
) 表示每个女生所坐的位置。

输出
对于每一组数据,输出阿杰要走的总距离,然后换行。

输入样例 1
4
1 4 2 3
3
1 3 2
输出样例 1
8
4

驻地一定是在中点,所以对大小排个序找中点然后累加就行,我开始用int结果爆了

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int a[1000];
int n;
int main()
{while(cin>>n)
{for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
int mid;
if(n%2!=0)
 mid=n/2+1;
 else
 mid=n/2;
long long sum=0;
for(int i=1;i<=n;i++)
sum+=abs(a[i]-a[mid]);
cout<<sum*2<<endl;
}
return 0;
}

点赞