描述
贝壳街上有很多家住户,小丁准备在该条街上开一家商店,请问,他的商店开在哪里,可以使得所有住户到商店的距离的总和是最小的。
本题中,假设该条街是一条笔直的街道,街道的起始位置标记为0,已知每个住户离起点的距离。
本题要求的位置可以是街道中的任何一个位置,也可以和住户的位置是重叠的,请你编程求解。
输入描述
输入的第一行是一个整数T,表示有T组测试数据。
每组测试数据第一行是一个整数N(1<=N<=1000)表示在贝壳街上共有N个住户。
接下来N行,每行一个整数ai(0<=ai<=30000)表示每个住户住所的位置,所有住户住所的位置均不相同。
输出描述
对于每组输入,输出一行,包含两个整数,分别是你确定的商店位置,以及商店到所有住户住所的距离之和。
用例输入 1
2 5 0 20 40 10 30 1 20
用例输出 1
20 60 20 0
代码:
#include<bits/stdc++.h>
using namespace std;
int t,n,a[1005],space,sum;
int main(){
cin>>t;
for(int i=1;i<=t;i++){
sum=0;
space=0;
cin>>n;
for(int j=1;j<=n;j++){
cin>>a[j];
}
sort(a+1,a+n+1);
if(n%2==1){
space=a[n/2+1];
for(int j=1;j<=n;j++){
sum+=abs(a[j]-space);
}
}else{
if((a[n/2]+a[n/2+1])/2==a[n/2]){
space=(a[n/2]+a[n/2+1])/2+1;
}else{
space=(a[n/2]+a[n/2+1])/2;
}
for(int j=1;j<=n;j++){
sum+=abs(a[j]-space);
}
}
cout<<space<<" "<<sum<<endl;
}
return 0;
}
不对,贪心