第一行输入一个正整数.
接下来行,每行输入两个正整数
,
,分别表示每个房子所在的二维坐标.
输出一个整数表示答案
4 0 0 0 50 50 50 50 0
100
当修建水渠位置的直线方程为或者
时,都能获得最小距离和.
import scala.io.StdIn
object Main {
def main(args: Array[String]): Unit = {
val n = StdIn.readInt
var xArr = Array.ofDim[Int](n)
for(i <- 0 until n){
val pos = StdIn.readLine().split(" ")
val x = pos(0).toInt
xArr(i) = x
}
xArr = xArr.sorted
val median = xArr(n / 2)
var totalDistance = 0L
for(i <- 0 until n) totalDistance += math.abs(xArr(i) - median)
println(totalDistance)
}
} import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] x = new int[n];
for(int i = 0; i < n; i++)
x[i] = Integer.parseInt(br.readLine().trim().split(" ")[0]);
Arrays.sort(x);
int median = x[n / 2];
long res = 0;
for(int i = 0; i < n; i++) res += Math.abs(median - x[i]);
System.out.println(res);
}
}
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//1.题目的答案其实和x轴的坐标无关系,只需要考虑y轴的数据;
//2.在输入数据的时候,是先输入的y,再输入x;
//3.假如只有两座房子,它们在y方向的距离为length,水渠只要在这两个端点之间(包括端点),所得到的距离总和就是最短的,
//为length,如果水渠在两个端点之外,那就不行;
//4.对所有的纵坐标从小到大排序,把最外侧的两个点找出来,它俩到水渠的距离之和为(y[n-1] - y[0]),水渠在它俩之间;
//接着考虑第2个数和倒数第2个数,水渠应该调整到它俩之间去,这样它俩到水渠的距离之和为(y[n-2] - y[1]);
//水渠的位置调整后,并不违背之前所做的工作,因为水渠的位置还是在第1个值和最后那个值之间;
//同理考虑第3组,。。。。这一步完成后,水渠的位置在第3组数之间,同样在第2组数之间,因为第3组数在第2组数的内侧
//5.最后的结果要把所有的差值加起来,注意要声明为long long类型;
//6.每次操作的是两个数,如果数的总数是奇数个呢?最中间那个可以不考虑,因为可以把水渠选在这个值上
void solve(int n)
{
vector<int> nums(n, 0);
for (int i = 0; i < n; ++i)
{
int x = 0;
cin >> nums[i] >> x; //先输入y,再输入的x,真是干tn的
}
sort(nums.begin(), nums.end()); //排序
int p1 = 0;
int p2 = n - 1;
long long ans = 0;
while(p1 < p2) //从两端往中间收缩
{
ans += nums[p2] - nums[p1]; //保存一组结果
++p1;
--p2;
}
cout << ans << endl;
}
int main()
{
int n = 0;
cin >> n;
solve(n);
return 0;
} import math n=int(input()) x=[] for i in range(n): x.append(int(input().split()[0])) x.sort() x_river=x[int(n/2)] ans=[abs(x_river-each_x)for each_x in x] print(sum(ans))
//注意int溢出就行
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
while(cin >> n){
vector<vector<int>> pos(n, vector<int>(2));
for(int i = 0; i < n; i++){
for(int j = 0; j < 2; j++){
cin >> pos[i][j];
}
}
sort(pos.begin(), pos.end(), [&](auto& a, auto& b){
return a[0] < b[0];
});
long sum = 0;
int left = 0, right = n - 1;
while(left < right){
sum += pos[right][0] - pos[left][0];
left++;
right--;
}
cout << sum << endl;
}
}
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
long[] positions = new long[n];
for(int i = 0; i < n; i++){
positions[i] = sc.nextLong();
sc.nextLong();
}
// 从大到小排序
Arrays.sort(positions);
double res = 0;
// 中位数作为水渠位置
double mid = n % 2 == 1 ? positions[n / 2] : (positions[n / 2 - 1] + positions[n / 2]) / 2;
// 求距离和
for(Long x : positions){
res += Math.abs(mid - x);
}
System.out.println((long)res);
}
} #include<iostream>
#include<bits/stdc++.h>
#include<vector>
#include<algorithm>
using namespace std;
typedef unsigned long long ll;
ll Abs(ll a,ll b)
{
if(a>b) return a-b;
else return b-a;
}
int main()
{
ios::sync_with_stdio(false),cin.tie(0);
ll n;
cin>>n;
ll ans=0;
ll X[n];
ll Y[n];
for(ll i=0;i<n;i++)
{
cin>>X[i]>>Y[i];
}
sort(X,X+n);
ll mid=n/2;
for(ll i=0;i<n;i++)
{
ans+=Abs(X[i],X[mid]);
}
cout<<ans<<endl;
return 0;
} #include <iostream>
#include <algorithm>
#include <vector>
#include <bits/stdc++.h>
#include <limits.h>
using namespace std;
int main(){
int num;
cin>>num;
int temp;
vector<int> arr;
for(int i=0;i<num;i++){
cin>>temp;
arr.push_back(temp);
cin>>temp;
}
sort(arr.begin(),arr.end());
long long temp2=LLONG_MAX-1;
for(int i=num/2;i<num/2+2;i++){
long long result=0;
for(int k=0;k<num;k++){
result=abs(arr[k]-arr[i])+result;
}
if(result<temp2){
temp2=result;
}
}
cout<<temp2<<endl;
return 0;
} using namespace std;
typedef long long ll;
ll n;
int main() {
cin >> n;
ll xi[n + 5];
ll yi[n + 5];
for (ll i = 0; i < n; i++) {
cin >> xi[i] >> yi[i];
}
sort(xi, xi + n);
ll mid = (n - 1) >> 1;
ll sum = 0;
for (ll i = 0; i < n; i++) {
sum += abs(xi[i] - xi[mid]);
}
cout << sum << endl;
return 0;
}