Submission #1148070

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

const int dx[] = {1, -1, 0, 0};
const int dy[] = {0, 0, 1, -1};

ll bfs(ll startX, ll startY, ll n) {
    if (startX >= 1 && startX <= n && startY >= 1 && startY <= 2) {
        return 0;
    }
    
    ll x = startX;
    ll y = startY;
    ll moves = 0;
    
    if (x < 1) {
        moves += (1 - x);
        x = 1;
    } else if (x > n) {
        moves += (x - n);
        x = n;
    }
    
    if (y < 1) {
        moves += (1 - y);
        y = 1;
    } else if (y > 2) {
        moves += (y - 2);
        y = 2;
    }
    
    return moves;
}

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