题目
Description
问题描述:
在一个按照东西和南北方向划分成规整街区的城市里,n个居民点散乱地分布在不同的街区中。用x 坐标表示东西向,用y坐标表示南北向。各居民点的位置可以由坐标(x,y)表示。街区中任意2 点(x1,y1)和(x2,y2)之间的距离可以用数值|x1-x2|+|y1-y2|度量。
居民们希望在城市中选择建立邮局的最佳位置,使n个居民点到邮局的距离总和最小。
编程任务:
给定n 个居民点的位置,编程计算n 个居民点到邮局的距离总和的最小值。
Input
第1 行是居民点数n,1<10000。< 个整数x 行是居民点的位置,每行2>
Output
n个居民点到邮局的距离总和的最小值。
Sample Input
5
1 2
2 2
1 3
3 -2
3 3
Sample Output
10
代码块
//这道题的结局方案,是分别找到,x坐标轴,y做标轴的中位数,并进行就算他们的度量,进行求和即可
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cn = new Scanner(System.in);
int n = cn.nextInt();
int[] x= new int[n];
int[] y = new int[n];
for(int i =0 ;i<n;i++){
x[i] =cn.nextInt();
y[i] = cn.nextInt();
}
Arrays.sort(x);
Arrays.sort(y);
double zx ,zy;
if(n%2==0){
zx = 1.0*(x[n/2-1]+x[n/2])/2;
zy = 1.0*(y[n/2-1]+y[n/2])/2;
}else{
zx = x[n/2];
zy = y[n/2];
}
double sum =0;
for(int i =0;i<n;i++){
sum+= Math.abs(x[i]-zx);
sum+=Math.abs(y[i]-zy);
}
System.out.println((int)sum);
}
}