#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int comp(const void *a, const void *b) {
return (*(long *)a - *(long *)b);
}
int main() {
int n, i;
long long sum = 0;
long x[100001] = {0}, y[100001] = {0}, m[100001] = {0};
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%ld %ld", &x[i], &y[i]);
}
qsort(y, n, sizeof(long), comp);
long y0 = y[n / 2];
for (i = 0; i < n; i++) {
sum += llabs(y[i] - y0);
}
qsort(x, n, sizeof(long), comp);
for (i = 0; i < n; i++) {
m[i] = x[i] - i;
}
qsort(m, n, sizeof(long), comp);
long x0 = m[n / 2];
for (i = 0; i < n; i++) {
sum += llabs(x[i] - i - x0);
}
printf("%lld\n", sum);
return 0;
}
Description总所周知,韩信是一位神勇的军事家。某日夜幕,敌方突然来袭,韩信作为塞外将帅吹响紧急的号角。各个帐内的士兵听见号角立即集合,站成一排,排成连续的一队。但是士兵太多了,如果让他们集合耗费太多精力就没有办法打好接下来的胜仗,因此韩信希望选择一个最优的方案使得所有士兵从帐内移动到将要站队的位置的曼哈顿距离和最小!Input第一行输入一个整数 n(1 ≤ n ≤ 10^5)表示士兵数量;接下来 n 行,每行输入两个整数 xi,yi(-10^9 ≤ xi,yi ≤ 10^9)表示第 i 名