import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
public class joi2019_ho_t4 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = parseInt(br.readLine().trim());
int total = 2 * N;
int[] X = new int[total];
int[] Y = new int[total];
for (int i = 0; i < total; i++) {
String[] parts = mySplit(br.readLine());
X[i] = parseInt(parts[0]);
Y[i] = parseInt(parts[1]);
}
mergeSort(X, 0, total - 1);
mergeSort(Y, 0, total - 1);
int[] targetX = new int[total];
int[] targetY = new int[total];
for (int i = 0; i < total; i++) {
targetX[i] = (i / 2) + 1;
}
for (int i = 0; i < total; i++) {
targetY[i] = (i < N) ? 1 : 2;
}
long sum = 0;
for (int i = 0; i < total; i++) {
sum += abs(X[i] - targetX[i]);
sum += abs(Y[i] - targetY[i]);
}
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
out.println(sum);
out.flush();
}
static void mergeSort(int[] a, int l, int r) {
if(l >= r) return;
int m = (l + r) / 2;
mergeSort(a, l, m);
mergeSort(a, m+1, r);
int[] temp = new int[r - l + 1];
int i = l, j = m+1, k = 0;
while(i <= m && j <= r) {
if(a[i] <= a[j]) { temp[k++] = a[i++]; }
else { temp[k++] = a[j++]; }
}
while(i <= m) { temp[k++] = a[i++]; }
while(j <= r) { temp[k++] = a[j++]; }
for(i = l, k = 0; i <= r; i++, k++) { a[i] = temp[k]; }
}
static int abs(int a) { return a < 0 ? -a : a; }
static String[] mySplit(String s) {
int len = s.length(), cnt = 0;
boolean inToken = false;
for (int i = 0; i < len; i++) {
if (!isSpace(s.charAt(i))) { if (!inToken) { cnt++; inToken = true; } }
else { inToken = false; }
}
String[] tokens = new String[cnt];
int idx = 0;
StringBuilder sb = new StringBuilder();
inToken = false;
for (int i = 0; i < len; i++) {
char c = s.charAt(i);
if (!isSpace(c)) { sb.append(c); inToken = true; }
else { if(inToken) { tokens[idx++] = sb.toString(); sb.setLength(0); inToken = false; } }
}
if(inToken) { tokens[idx++] = sb.toString(); }
return tokens;
}
static boolean isSpace(char c) { return c==' ' || c=='\t' || c=='\n' || c=='\r'; }
static int parseInt(String s) {
int i = 0, n = s.length(), num = 0, sign = 1;
if(n==0)return 0;
char c = s.charAt(0);
if(c=='-') { sign=-1; i++; }
else if(c=='+') { i++; }
for(; i<n; i++){ num = num*10 + (s.charAt(i)-'0'); }
return sign * num;
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |