제출 #1148007

#제출 시각아이디문제언어결과실행 시간메모리
1148007tito_daynorCoin Collecting (JOI19_ho_t4)C++17
0 / 100
0 ms328 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll, ll> pll; struct Position { ll x, y; Position(ll _x = 0, ll _y = 0) : x(_x), y(_y) {} }; ll manhattan_distance(const Position& a, const Position& b) { return abs(a.x - b.x) + abs(a.y - b.y); } ll bfs(Position start, Position target) { return manhattan_distance(start, target); } ll solve_assignment(vector<Position>& coins, vector<Position>& targets) { ll total_moves = 0; vector<bool> used(targets.size(), false); for(size_t i = 0; i < coins.size(); i++) { ll min_dist = LLONG_MAX; size_t best_target = 0; for(size_t j = 0; j < targets.size(); j++) { if(!used[j]) { ll dist = bfs(coins[i], targets[j]); if(dist < min_dist) { min_dist = dist; best_target = j; } } } used[best_target] = true; total_moves += min_dist; } return total_moves; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int N; cin >> N; vector<Position> coins(2 * N); for(int i = 0; i < 2 * N; i++) { cin >> coins[i].x >> coins[i].y; } vector<Position> targets; for(int x = 1; x <= N; x++) { for(int y = 1; y <= 2; y++) { targets.push_back(Position(x, y)); } } ll result = solve_assignment(coins, targets); cout << result << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...