Submission #1156648

#TimeUsernameProblemLanguageResultExecution timeMemory
1156648cot7302Let's Win the Election (JOI22_ho_t3)C++20
100 / 100
327 ms2428 KiB
#include <bits/stdc++.h>
#define ALL(X) begin(X), end(X)
using i64 = long long;
using namespace std;

template <class T>
using vec = vector<T>;

template <class T>
istream& operator>>(istream& is, vec<T>& X) {
  for (auto& x : X) {
    is >> x;
  }
  return is;
}

template <class T>
constexpr T infty = 0;

template <>
constexpr int infty<int> = 1'000'000'000;

template <>
constexpr i64 infty<i64> = 1'000'000'000'000'000'000;

using ld = double;

constexpr ld inf = 1e308;

int main() {
  cin.tie(nullptr)->sync_with_stdio(false);
  int N, K; cin >> N >> K;
  vec<pair<int, int>> BA(N);
  for (auto& [b, a] : BA) {
    cin >> a >> b;
    if (b == -1) {
      b = 777771449;
    }
  }
  sort(ALL(BA));
  vec<vec<ld>> dp(K + 1, vec<ld>(K + 1, inf));
  auto calc = [&](int l) -> ld {
    for (int i = 0; i <= l; i++) {
      for (int j = 0; j <= K; j++) {
        dp[i][j] = inf;
      }
    }
    dp[0][0] = 0;
    for (int i = 0; i < N; i++) {
      auto [b, a] = BA[i];
      for (int j = l; j >= 0; j--) {
        if (j == l) {
          for (int k = K; k > 0; k--) {
            dp[j][k] = min(dp[j][k], dp[j][k - 1] + (ld)a / (l + 1));
            if (j > 0 && b != 777771449) {
              dp[j][k] = min(dp[j][k], dp[j - 1][k - 1] + (ld)b / j);
            }
          }
        }
        else if (i < K) {
          dp[j][i + 1] = min(dp[j][i + 1], dp[j][i] + (ld)a / (l + 1));
          if (j > 0 && b != 777771449) {
            dp[j][i + 1] = min(dp[j][i + 1], dp[j - 1][i] + (ld)b / j);
          }
          dp[j][i] = inf;
        }
      }
    }
    return dp[l][K];
  };
  cout << fixed << setprecision(15);
  ld ans{inf};
  for (int i = 0; i <= K; i++) {
    ans = min(ans, calc(i));
  }
  cout << ans << '\n';
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...