Submission #785779

#TimeUsernameProblemLanguageResultExecution timeMemory
785779jakobrsHiring (IOI09_hiring)C++17
12 / 100
1584 ms13520 KiB
#include <iostream>
#include <algorithm>
#include <vector>

using i64 = int64_t;
using f64 = double;

struct Candidate {
  i64 id;
  i64 s;
  i64 q;
};

int main() {
  i64 n, w;
  std::cin >> n >> w;

  std::vector<Candidate> candidates;
  for (i64 i = 0; i < n; i++) {
    i64 s, q;
    std::cin >> s >> q;
    candidates.push_back({ .id = i, .s = s, .q = q });
  }

  std::sort(candidates.begin(), candidates.end(), [](const auto &lhs, const auto &rhs) {
    return lhs.s * rhs.q < rhs.s * lhs.q;
  });
  std::vector<i64> best_bin;
  double best_budget = -1;
  for (i64 i = 0; i < n; i++) {
    auto model = candidates[i];
    auto s_over_q = (f64)model.s / (f64)model.q;

    double budget = w;

    std::vector<i64> bin;
    for (i64 j = 0; j < n; j++) {
      const auto &candidate = candidates[j];
      double price = s_over_q * candidate.q;
      if (price + 0.000001 >= candidate.s && price <= budget) {
        budget -= price;
        bin.push_back(j);
      }
    }

    if (bin.size() > best_bin.size() || (bin.size() == best_bin.size() && budget > best_budget)) {
      best_bin = std::move(bin);
      best_budget = budget;
    }
  }

  std::cout << best_bin.size() << '\n';
  for (i64 x : best_bin)
    std::cout << candidates[x].id + 1 << '\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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...