제출 #392143

#제출 시각아이디문제언어결과실행 시간메모리
392143HegdahlDetecting Molecules (IOI16_molecules)C++17
0 / 100
1 ms204 KiB
#include "molecules.h"
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

vector<int> find_subset(int _l, int _u, vector<int> w) {
  ll l = _l, u = _u;
  int n = w.size();

  if (n == 1) {
    if (w[0] >= l && w[0] <= u)
      return {1};
    return {};
  }

  vector<int> idxs(n);
  iota(idxs.begin(), idxs.end(), 0);
  sort(idxs.begin(), idxs.end(), [&](int i, int j){ return w[i] < w[j]; });

  vector<int> ans;
  ll s = 0;

  int small = w[idxs[0]];
  int big = w[idxs.back()];

  for (int _i = n-2; _i > 0; --_i) {
    int i = idxs[_i];

    if (s+w[i] >= l && s+w[i] <= u) {
      ans.push_back(i+1);
      s += w[i];
      return ans;
    }

    if (s+w[i]+big < l) {
      ans.push_back(i+1);
      s += w[i];
    } else if (s+w[i]+small <= u) {
      s += w[i];
      ans.push_back(i+1);
      break;
    }
  }

  if (s >= l && s <= u) return ans;
  else if (s+small >= l && s+small <= u) {
    ans.push_back(idxs[0]+1);
    return ans;
  } else if (s+big >= l && s+big <= u) {
    ans.push_back(idxs.back()+1);
    return ans;
  } else if (s+small+big >= l && s+small+big <= u) {
    ans.push_back(idxs[0]+1);
    ans.push_back(idxs.back()+1);
    return ans;
  }

  return {};
}
#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...