站外题求调,玄关
  • 板块灌水区
  • 楼主lucky213
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/11 09:46
  • 上次更新2024/7/11 11:01:01
查看原帖
站外题求调,玄关
1104834
lucky213楼主2024/7/11 09:46

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

本题中,假设该条街是一条笔直的街道,街道的起始位置标记为 0 0 ,已知每个住户离起点的距离。

本题要求的位置可以是街道中的任何一个位置,也可以和住户的位置是重叠的,如果有多个位置到所有住户的距离总和都是最小的,请输出可选位置的最大值。

输入

输入的第一行是一个整数 T ,表示有 T 组测试数据。

每组测试数据第一行是一个整数 N( 1 ≤ ≤ 1000 1≤N≤1000 )表示在贝壳街上共有 N 个住户。

接下来 N 行,每行一个整数 a i

( 0≤a i ​ ≤30000 )表示每个住户住所的位置,所有住户住所的位置均不相同。

输出

对于每组输入,输出一行,包含两个整数,分别是你确定的商店位置,以及商店到所有住户住所的距离之和。

样例

输入

2
5
0
20
40
10
30
1
20

输出

20 60
20 0

时间限制 1 秒 内存限制 128 MB

下面是我的代码:

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int t,n,a[1010],i,j;
int main(){
	cin>>t;
	while(t--)
	{
		cin>>n;
		for(i=1;i<=n;i++){
			cin>>a[i];
		}
		sort(a+1,a+n+1);
		long long d,ans=0,ansans;
		bool f=1;
		for(i=a[0];i<=a[n];i++){
			d=0;
			for(j=1;j<=n;j++){
				d+=abs(a[j]-i);
			}
			if(f){
				ans=d;
				f=0;
			}
			else{
				if(d<ans){
					ans=d;
					ansans=i;
				}
			}
		}
		cout<<ansans<<" "<<ans<<endl;
	}
	return 0;
}
2024/7/11 09:46
加载中...