Submission #1083591

#TimeUsernameProblemLanguageResultExecution timeMemory
1083591selmahbnPalembang Bridges (APIO15_bridge)C++17
22 / 100
35 ms8908 KiB
#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define pll pair<ll, ll>

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int k, n;
    cin >> k >> n;
    ll sum = 0;
    vector<pll> se;
    for (int i = 0; i < n; i++) {
        ll s, t;
        char p, q;
        cin >> p >> s >> q >> t;
        sum += abs(s-t);
        if (p != q) sum++;
        else continue;
        if (s > t) swap(s, t);
        se.push_back(make_pair(s, 0));
        se.push_back(make_pair(t, 1));
    }
    n = (int) se.size()/2;
    sort(se.begin(), se.end());
    vector<ll> dpe(2*n, 0);
    ll ae = 0;
    for (int i = 1; i < 2*n; i++) {
        dpe[i] = dpe[i-1];
        if (se[i].first == se[i-1].first) {
            if (se[i].second == 1) ae++;
            continue;
        }
        dpe[i] += 2*(se[i].first-se[i-1].first)*ae;
        if (se[i].second == 1) ae++;
    }
    vector<ll> dps(2*n, 0);
    ll as = 0;
    for (int i = 2*n-2; i >= 0; i--) {
        dps[i] = dps[i+1];
        if (se[i].first == se[i+1].first) {
            if (se[i].second == 0) as++;
            continue;
        }
        dps[i] += 2*(se[i+1].first-se[i].first)*as;
        if (se[i].second == 0) as++;
    }
    ll mini = numeric_limits<ll>::max()/2;
    if (n == 0) mini = 0;
    for (int i = 0; i < 2*n; i++) {
        mini = min(mini, dps[i]+dpe[i]);
    }
    cout << sum+mini;
    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...