Submission #1179037

#TimeUsernameProblemLanguageResultExecution timeMemory
1179037kl_2200100003Palembang Bridges (APIO15_bridge)C++20
0 / 100
0 ms328 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long

struct Citizen {
    int sideFrom, sideTo;
    ll from, to;
};

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int K, N;
    cin >> K >> N;

    vector<Citizen> citizens(N);
    vector<ll> bridge_candidates;

    for (int i = 0; i < N; ++i) {
        string s;
        cin >> s;
        citizens[i].sideFrom = (s[0] == 'A' ? 0 : 1);
        ll num1 = 0, j = 1;
        while (isdigit(s[j])) num1 = num1 * 10 + (s[j++] - '0');
        citizens[i].from = num1;

        citizens[i].sideTo = (s[j++] == 'A' ? 0 : 1);
        ll num2 = 0;
        while (j < s.size()) num2 = num2 * 10 + (s[j++] - '0');
        citizens[i].to = num2;

        if (citizens[i].sideFrom != citizens[i].sideTo) {
            // Add both positions for potential bridge
            bridge_candidates.push_back(citizens[i].from);
            bridge_candidates.push_back(citizens[i].to);
        }
    }

    sort(bridge_candidates.begin(), bridge_candidates.end());
    ll ans = LLONG_MAX;

    for (ll bridge : bridge_candidates) {
        ll total = 0;
        for (const auto& c : citizens) {
            if (c.sideFrom == c.sideTo) {
                total += abs(c.from - c.to);
            } else {
                // Cost using bridge at `bridge`
                ll temp = abs(c.from - bridge) + 1 + abs(c.to - bridge);
                total += temp;
            }
        }
        ans = min(ans, total);
    }

    cout << ans << '\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...