Submission #1169146

#TimeUsernameProblemLanguageResultExecution timeMemory
1169146rafsanamin2020Coin Collecting (JOI19_ho_t4)C++20
0 / 100
1 ms828 KiB
#include <bits/stdc++.h> #define X first #define Y second typedef long long int ll; ll N, cost = 0; using namespace std; ll _x(ll n) { return n >= N ? N : n <= 1 ? 1 : n; } ll _cx(ll n) { return n >= N ? n - N : n <= 1 ? 1 - n : 0; } ll _y(ll n) { return n <= 1 ? 1 : 2; } ll _cy(ll n) { return n <= 1 ? 1 - n : n - 2; } ll moveX[4] = {-1, 1, 0, 0}; ll moveY[4] = {0, 0, -1, 1}; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); vector<pair<ll, ll>> coins; cin >> N; vector<vector<ll>> grid(N + 1, vector<ll>(2 + 1, 0)); for (ll i = 0; i < 2 * N; i++) { ll x, y; cin >> x >> y; grid[_x(x)][_y(y)]++; cost += _cx(x) + _cy(y); } for (ll i = 1; i <= N; i++) { for (ll j = 1; j <= 2; j++) { if (grid[i][j] == 0) { queue<pair<ll, ll>> todo; todo.push({i, j}); while (!todo.empty()) { pair<ll, ll> front = todo.front(); todo.pop(); if (front.X < 1 || front.X > N || front.Y < 1 || front.Y > 2) continue; if (grid[front.X][front.Y] > 1) { grid[front.X][front.Y]--; grid[i][j]++; cost += abs(front.X - i) + abs(front.Y - j); break; } for (ll p = 0; p < 4; p++) { todo.push({front.X + moveX[p], front.Y + moveY[p]}); } } // cout << cost << "\n"; // for (ll i = 1; i <= N; i++) // { // for (ll j = 1; j <= 2; j++) // { // cout << grid[i][j] << " "; // } // cout << "\n"; // } // cout << "\n"; } } } cout << cost; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...