#include #include #include using namespace std; #define MAXN 100000 #define MAXK 1000 int N, K; long long suma, min_suma; struct bod { long long X, Y; int nasobnost; bod(){nasobnost=1;}} puvodni[MAXN], nasobne[MAXK]; bool porovnej(const bod &k, const bod &l) { if (k.X == l.X) return k.Y < l.Y; return k.X < l.X; } int main() { scanf("%d", &N); for (int i = 0; i < N; i++) scanf("%lld%lld", &puvodni[i].X, &puvodni[i].Y); sort(puvodni, puvodni + N, porovnej); nasobne[0] = puvodni[0]; nasobne[0].nasobnost = 1; K = 1; //aktuální počet násobných vrcholů for (int i = 1; i < N; i++) if (puvodni[i].X != puvodni[i-1].X || puvodni[i].Y != puvodni[i-1].Y) { nasobne[K++] = puvodni[i]; nasobne[K].nasobnost=1; } else nasobne[K-1].nasobnost++; min_suma = 1ll << 60; // číslo vyšší než libovolné, které se může při výpočtu objevit for (int i = 0; i < K; i++) { suma = 0; for (int k = 0; k < K; k++) suma += nasobne[k].nasobnost * max(abs(nasobne[k].X - nasobne[i].X), abs(nasobne[k].Y - nasobne[i].Y)); min_suma = min(suma, min_suma); } printf("%lld\n", min_suma); return 0; }