제출 #296713

#제출 시각아이디문제언어결과실행 시간메모리
296713Haunted_CppDetecting Molecules (IOI16_molecules)C++17
69 / 100
1041 ms4600 KiB
#include <bits/stdc++.h>

#include "molecules.h"
using namespace std;

vector<int> find_subset(int lo, int hi, vector<int> w) {
  const int n = w.size();
  vector<pair<int, int>> arr(n);
  for (int i = 0; i < n; i++) {
    arr[i] = {w[i], i};
  }
  sort(arr.begin(), arr.end());
  vector<long long> dp(n);
  dp[0] = arr[0].first;
  for (int i = 1; i < n; i++) {
    dp[i] = arr[i].first + dp[i - 1];
  }
  auto range_sum = [&](int l, int r) {
    return dp[r] - (l - 1 >= 0 ? dp[l - 1] : 0);
  };
  for (int t = 1; t <= n; t++) {
    long long s = 0;
    for (int i = 0; i <= t; i++) {
      const int suf = t - i;
      long long add = range_sum(n - suf, n - 1);
      if (suf >= 1) s += add;
      if (s >= lo && s <= hi) {
        vector<int> res;
        for (int x = 0; x < i; x++) {
          res.emplace_back(arr[x].second);
        }
        for (int x = n - suf; x < n; x++) {
          res.emplace_back(arr[x].second);
        }
        return res;
      }
      s -= add;
      s += arr[i].first;
    }
  }
  return vector<int>();
}
#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...