#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
using namespace std;
template<class T>
using ordered_set = tree<T, null_type, less<T>,
rb_tree_tag, tree_order_statistics_node_update>;
template<class T, class U>
using ordered_map = tree<T, U, less<T>, rb_tree_tag,
tree_order_statistics_node_update>;
#define ll long long
#define MOD 1000000007
#define MAXN 2e5
#define SIZE 314
#define pb push_back
ll power(ll a, ll b){
if (b == 0) return 1;
ll res = power(a, b / 2);
if (b % 2 == 1) return res * res % MOD * a % MOD;
return res * res % MOD;
// if (b % 2 == 1) return res * res * a;
// return res * res;
}
int main(){
// ios_base::sync_with_stdio(0);
// cin.tie(0);
// cout.tie(0);
int n;
cin >> n;
vector<pair<int, int>> nums(2 * n);
for (int i = 0; i < 2 * n; i++){
int x, y;
cin >> x >> y;
nums[i] = {x, y};
}
vector<vector<int>> cnt(n + 1, vector<int>(3, 0));
ll ans = 0;
for (int i = 0; i < 2 * n; i++){
auto [x, y] = nums[i];
if (x >= 1 && x <= n && y >= 1 && y <= 2){
cnt[x][y]++;
continue;
}
if (x >= 1 && x <= n){
if (y > 2){
cnt[x][2]++;
ans += y - 2;
continue;
}
else{
cnt[x][1]++;
ans += 1 - y;
continue;
}
}
else if (y >= 1 && y <= 2){
if (x < 1){
cnt[1][y]++;
ans += 1 - x;
}
else{
cnt[n][y]++;
ans += x - n;
}
continue;
}
else{
if (x < 1){
if (y < 1){
cnt[1][1]++;
ans += (1 - x) + (1 - y);
}
else{
cnt[1][2]++;
ans += (1 - x) + (y - 2);
}
}
else{
if (y < 1){
cnt[n][1]++;
ans += (x - n) + (1 - y);
}
else{
cnt[n][2]++;
ans += (x - n) + (y - 2);
}
}
}
}
int lastYes = n;
for (int i = n; i >= 1; i--){
while (lastYes >= 1 && cnt[lastYes][1] <= 1 && cnt[lastYes][2] <= 1){
lastYes--;
continue;
}
if (lastYes <= 0) break;
if (cnt[i][1] == 0){
cnt[i][1]++;
if (cnt[lastYes][1] > 1){
cnt[lastYes][1]--;
ans += abs(i - lastYes);
}
else{
cnt[lastYes][2]--;
ans += abs(i - lastYes) + 1;
}
i++;
continue;
}
if (cnt[i][2] == 0){
cnt[i][2]++;
if (cnt[lastYes][2] > 1){
cnt[lastYes][2]--;
ans += abs(i - lastYes);
}
else{
cnt[lastYes][1]--;
ans += abs(i - lastYes) + 1;
}
i++;
continue;
}
}
cout << ans << "\n";
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |