Submission #1148072

#TimeUsernameProblemLanguageResultExecution timeMemory
1148072tito_daynorCoin Collecting (JOI19_ho_t4)C++17
100 / 100
27 ms1608 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const int MAXN = 1e5 + 5;
int dp[MAXN][3];
ll ans = 0;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    
    int n;
    cin >> n;
    
    for(int i = 1; i <= 2 * n; i++) {
        ll x, y;
        cin >> x >> y;
        
        if(x < 1) {
            ans += 1 - x;
            x = 1;
        }
        if(x > n) {
            ans += x - n;
            x = n;
        }
        if(y < 1) {
            ans += 1 - y;
            y = 1;
        }
        if(y > 2) {
            ans += y - 2;
            y = 2;
        }
        
        dp[x][y]++;
    }
    
    ll carry1 = 0, carry2 = 0;
    for(int i = 1; i <= n; i++) {
        dp[i][1]--;
        dp[i][2]--;
        
        dp[i][1] += carry1;
        dp[i][2] += carry2;
        
        if(dp[i][1] > 0 && dp[i][2] < 0) {
            int move = min(dp[i][1], -dp[i][2]);
            ans += move;
            dp[i][1] -= move;
            dp[i][2] += move;
        }
        if(dp[i][2] > 0 && dp[i][1] < 0) {
            int move = min(dp[i][2], -dp[i][1]);
            ans += move;
            dp[i][2] -= move;
            dp[i][1] += move;
        }
        
        ans += abs(dp[i][1]) + abs(dp[i][2]);
        carry1 = dp[i][1];
        carry2 = dp[i][2];
    }
    
    cout << ans << "\n";
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...