제출 #1179053

#제출 시각아이디문제언어결과실행 시간메모리
1179053kl_2200100003Palembang Bridges (APIO15_bridge)C++17
0 / 100
2 ms320 KiB
#include <iostream> #include <vector> #include <algorithm> #include <cmath> #include <climits> // For LLONG_MAX using namespace std; typedef long long ll; struct Person { char fromZone, toZone; int fromPos, toPos; }; ll distance(const Person& p, int bridgePos) { if (p.fromZone == p.toZone) { return abs(p.fromPos - p.toPos); } else { return abs(p.fromPos - bridgePos) + 1 + abs(p.toPos - bridgePos); } } ll totalDistance(const vector<Person>& people, const vector<int>& bridges) { ll sum = 0; for (const auto& p : people) { if (p.fromZone == p.toZone) { sum += abs(p.fromPos - p.toPos); } else { ll minDist = LLONG_MAX; for (int b : bridges) { minDist = min(minDist, distance(p, b)); } sum += minDist; } } return sum; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int K, N; cin >> K >> N; vector<Person> people(N); vector<int> candidateBridges; for (int i = 0; i < N; ++i) { string s; cin >> s; people[i].fromZone = s[0]; int idx = 1; while (isdigit(s[idx])) idx++; people[i].fromPos = stoi(s.substr(1, idx - 1)); people[i].toZone = s[idx]; people[i].toPos = stoi(s.substr(idx + 1)); if (people[i].fromZone != people[i].toZone) { candidateBridges.push_back(people[i].fromPos); candidateBridges.push_back(people[i].toPos); } } sort(candidateBridges.begin(), candidateBridges.end()); candidateBridges.erase(unique(candidateBridges.begin(), candidateBridges.end()), candidateBridges.end()); ll result = LLONG_MAX; int m = candidateBridges.size(); // Try all combinations of up to K bridges (K <= 2) if (K == 1) { for (int i = 0; i < m; ++i) { vector<int> bridges = {candidateBridges[i]}; result = min(result, totalDistance(people, bridges)); } } else { for (int i = 0; i < m; ++i) { for (int j = i; j < m; ++j) { vector<int> bridges = {candidateBridges[i], candidateBridges[j]}; result = min(result, totalDistance(people, bridges)); } } } cout << result << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...