#include<iostream>
#include<algorithm>
#include<utility>
#include<vector>
#include<cmath>
using namespace std;
typedef long long ll;
const ll inf = 1e18;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
vector<pair<ll, ll>> vec(2 * n);
for(int i = 0; i < 2 * n; i++) cin >> vec[i].first >> vec[i].second;
vector<vector<ll>> grid(n + 1, vector<ll>(3));
ll ans = 0;
for(auto &[x, y]: vec){
int nx, ny;
if(x < 1){
nx = 1;
ans += 1 - x;
}
else if(x > n){
nx = n;
ans += x - n;
}
else nx = x;
if(y >= 2){
ans += y - 2;
ny = 2;
}
else{
ans += 1 - y;
ny = 1;
}
grid[nx][ny]++;
}
int cur = 0;
for(int i = 1; i <= n; i++){
cur += grid[i][1];
cur += grid[i][2];
int tar = cur - 2 * i;
ans += abs(tar);
//cout << cur << " " << tar << "\n";
if(tar > 0){
if(grid[i][1] > 1){
if(grid[i][1] - 1 > tar){
grid[i][1] -= tar;
grid[i + 1][1] += tar;
tar = 0;
}
else{
grid[i + 1][1] += grid[i][1] - 1;
tar -= grid[i][1] - 1;
grid[i][1] = 1;
}
}
if(grid[i][2] > 1){
if(grid[i][2] - 1 > tar){
grid[i][2] -= tar;
grid[i + 1][2] += tar;
tar = 0;
}
else{
grid[i + 1][2] += grid[i][2] - 1;
tar -= grid[i][2] - 1;
grid[i][2] = 1;
}
}
}
if(tar < 0){
tar = -tar;
if(grid[i][1] < 1){
if(1 - grid[i][1] > tar){
grid[i][1] += tar;
grid[i + 1][1] -= tar;
tar = 0;
}
else{
grid[i + 1][1] -= 1 - grid[i][1];
tar -= 1 - grid[i][1];
grid[i][1] = 1;
}
}
if(grid[i][2] < 1){
if(1 - grid[i][2] > tar){
grid[i][2] += tar;
grid[i + 1][2] -= tar;
tar = 0;
}
else{
grid[i + 1][2] -= 1 - grid[i][2];
tar -= 1 - grid[i][2];
grid[i][2] = 1;
}
}
}
ans += abs(grid[i][1] - 1);
cur = 2 * i;
}
cout << ans << "\n";
}
// g++ -std=c++17 -Wall -Wextra -Wshadow -fsanitize=undefined -fsanitize=address -o run pD.cpp
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |