Submission #1139470

#TimeUsernameProblemLanguageResultExecution timeMemory
1139470DeathIsAweCoin Collecting (JOI19_ho_t4)C++20
100 / 100
103 ms1972 KiB
#include <bits/stdc++.h>
using namespace std;
#define ff first
#define ss second
#define pb push_back
#define pf push_front
#define mp make_pair
#define ll long long
int grid[100000][2];



int main() {
    for (int i=0;i<100000;i++) {
        grid[i][0] = 0; grid[i][1] = 0;
    }
    ll ans = 0, d1, d2;
    int n; cin >> n;
    
    for (int i=0;i<2*n;i++) {
        cin >> d1 >> d2;
        d1 -= 1; d2 -= 1;
        if (d1 <= 0 && d2 <= 0) {
            grid[0][0] += 1;
            ans += -d1 - d2;
        } else if (d1 <= 0 && d2 >= 1) {
            grid[0][1] += 1;
            ans += -d1 + d2 - 1;
        } else if (d1 >= n-1 && d2 >= 1) {
            grid[n-1][1] += 1;
            ans += d1 + d2 - (n - 1) - 1; 
        } else if (d1 >= n-1 && d2 <= 0) {
            grid[n-1][0] += 1;
            ans += d1 - d2 - (n - 1);
        } else if (d2 >= 1) {
            grid[d1][1] += 1;
            ans +=  d2 - 1;
        } else  if (d2 <= 0) {
            grid[d1][0] += 1;
            ans += -d2;
        }
    }
    //for (int i=0;i<n;i++) {
    //    cout << grid[i][1] << ' ';
    //} cout << '\n';
    //for (int i=0;i<n;i++) {
    //    cout << grid[i][0] << ' ';
    //} cout << '\n';
    //cout << ans << '\n' << '\n';

    deque<int> toprow0, botrow0;
    deque<pair<int,int>> toprowmore, botrowmore;
    for (int i=0;i<n;i++) {
        if (grid[i][0] == 0) {
            botrow0.push_back(i);
        } else if (grid[i][0] > 1) {
            botrowmore.push_back(mp(i, grid[i][0] - 1));
        }
        if (grid[i][1] == 0) {
            toprow0.push_back(i);
        } else if (grid[i][1] > 1) {
            toprowmore.push_back(mp(i, grid[i][1] - 1));
        }

        while (botrow0.size() > 0 && botrowmore.size() > 0) {
            ans += abs(botrow0[0] - botrowmore[0].ff);
            botrowmore[0].ss -= 1;
            if (botrowmore[0].ss == 0) {
                botrowmore.pop_front();
            }
            botrow0.pop_front();
        }
        while (toprow0.size() > 0 && toprowmore.size() > 0) {
            ans += abs(toprow0[0] - toprowmore[0].ff);
            toprowmore[0].ss -= 1;
            if (toprowmore[0].ss == 0) {
                toprowmore.pop_front();
            }
            toprow0.pop_front();
        }

        while (toprow0.size() > 0 && botrowmore.size() > 0) {
            ans += abs(toprow0[0] - botrowmore[0].ff) + 1;
            botrowmore[0].ss -= 1;
            if (botrowmore[0].ss == 0) {
                botrowmore.pop_front();
            }
            toprow0.pop_front();
        }
        while (botrow0.size() > 0 && toprowmore.size() > 0) {
            ans += abs(botrow0[0] - toprowmore[0].ff) + 1;
            toprowmore[0].ss -= 1;
            if (toprowmore[0].ss == 0) {
                toprowmore.pop_front();
            }
            botrow0.pop_front();
        }
    }
    cout << ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...