Submission #242693

#TimeUsernameProblemLanguageResultExecution timeMemory
242693neihcr7jPalembang Bridges (APIO15_bridge)C++14
22 / 100
145 ms7408 KiB
#include<bits/stdc++.h>

#define oo ll(1e15)
#define maxn 100005

using namespace std;
typedef long long ll;

int n, k;
vector < pair < int, int > > L;

ll a[maxn], b[maxn];

void calc(vector < pair < int, int > >& L, ll a[]){
  multiset < int > s;
  s.clear();
  ll sum = 0, ret = 0;

  a[0] = 0;
  for (int i = 1; i <= n; ++i) {
    int x = L[i - 1].first, y = L[i - 1].second;

    sum += x + y;
    s.insert(x); ret += x;
    s.insert(y); ret += y;

    while (s.size() > i) {
      ret -= *s.begin();
      s.erase(s.begin());
    }

    a[i] = 2 * ret - sum;
  }
}

int main(){
  #define TASK "ABC"
 // freopen(TASK".inp", "r", stdin); freopen(TASK".out", "w", stdout);
  ios_base::sync_with_stdio(0);

  ll ret = 0;

  cin >> k >> n;

  for (int i = 0; i < n; ++i) {
    char ch1, ch2;
    int x, y;
    cin >> ch1 >> x >> ch2 >> y;

    if (x > y) swap(x, y);

    if (ch1 == ch2) {
      ret += y - x;
      continue;
    }

    L.push_back({x, y});
  }

  n = L.size();

  sort(L.begin(), L.end());

  ll ans = oo;

  calc(L, a);
  reverse(L.begin(), L.end());
  calc(L, b);

  if (k == 1)
    cout << a[n] + ret + n;
  else {
    for (int i = 1; i < n; ++i)
      ans = min(ans, a[i] + b[n - i]);
    cout << ans + ret + n;
  }

  return 0;
}

Compilation message (stderr)

bridge.cpp: In function 'void calc(std::vector<std::pair<int, int> >&, ll*)':
bridge.cpp:27:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     while (s.size() > i) {
            ~~~~~~~~~^~~
#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...