Submission #1137083

#TimeUsernameProblemLanguageResultExecution timeMemory
1137083fryingducDetecting Molecules (IOI16_molecules)C++20
100 / 100
32 ms3400 KiB
#include "bits/stdc++.h"
using namespace std;

#ifdef duc_debug
#include "bits/debug.h"
#else
#include "molecules.h"
#define debug(...)
#endif

vector<int> find_subset(int l, int u, vector<int> w) {
  vector<int> res;
  int sz = (int)w.size();
  vector<int> ord(sz);
  iota(ord.begin(), ord.end(), 0);
  sort(ord.begin(), ord.end(), [&](const int &x, const int &y) -> bool {
    return w[x] < w[y];
  });
  
  deque<int> dq;
  stack<int> st;
  
  long long sum = 0;
  
  
  for(int i = 0; i < sz; ++i) {
    dq.push_back(ord[i]);
    sum += w[ord[i]];
    if(sum > u) {
      sum -= w[dq.front()];
      dq.pop_front();
    }
    
    if(l <= sum and sum <= u) {
      res = vector<int>(dq.begin(), dq.end());
      return res;
    }
    
    if(dq.empty()) {
      return vector<int>();
    }
  }
  return vector<int>();
}

#ifdef duc_debug

void solve() {
  int n, l, u; cin >> n >> l >> u;
  vector<int> w(n);
  for(auto &i:w) {
    cin >> i;
  }
  
  vector<int> res = find_subset(l, u, w);
  long long x = 0;
  for(auto i:res) {
    x += w[i];
  }
  if(l <= x and x <= u) {
    cout << "YES\n";
    for(auto i:res) {
      cout << i << " ";
    }
  } else {
    cout << "NO\n";
  }
}

signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);

  solve();

  return 0;
}

#endif


Compilation message (stderr)

molecules.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
molecules_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#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...