Submission #170428

#TimeUsernameProblemLanguageResultExecution timeMemory
170428AlexLuchianovDetecting Molecules (IOI16_molecules)C++14
100 / 100
85 ms6520 KiB
#include "molecules.h"
#include <algorithm>

using ll = long long;

int const nmax = 200000;

int v[1 + nmax];
int seen[1 + nmax], ind[1 + nmax];

bool compare(int x, int y){
  return v[x] < v[y];
}

std::vector<int> find_subset(int l, int u, std::vector<int> w) {
  std::vector<int> sol;
  int n = w.size();
  for(int i = 0; i < n; i++)
    v[i] = w[i];
  for(int i = 0; i < n; i++)
    ind[i] = i;
  std::sort(ind, ind + n, compare);

  ll sum1 = 0, sum2 = 0;

  for(int i = 0; i < n; i++){
    int pos1 = ind[i], pos2 = ind[n - 1 - i];

    seen[pos1] = 1;
    sum1 += w[pos1];
    sum2 += w[pos2];

    if(sum1 <= u && l <= sum2){
      int ptr = 0;
      while(sum1 < l){
        seen[ind[ptr]] = 0;
        seen[ind[n - 1 - ptr]] = 1;
        sum1 -= w[ind[ptr]];
        sum1 += w[ind[n - 1 - ptr]];
        ptr++;
      }
      for(int i = 0; i < n; i++)
        if(seen[i] == 1)
          sol.push_back(i);
      return sol;
    }
  }
  return sol;
}
#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...