站外题求助
  • 板块灌水区
  • 楼主xyj114514
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/27 21:40
  • 上次更新2024/3/28 10:34:20
查看原帖
站外题求助
1026088
xyj114514楼主2024/3/27 21:40

描述

贝壳街上有很多家住户,小丁准备在该条街上开一家商店,请问,他的商店开在哪里,可以使得所有住户到商店的距离的总和是最小的。

本题中,假设该条街是一条笔直的街道,街道的起始位置标记为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;
}

不对,贪心

2024/3/27 21:40
加载中...