Submission #1223404

#TimeUsernameProblemLanguageResultExecution timeMemory
122340412baaterDetecting Molecules (IOI16_molecules)C++20
9 / 100
0 ms328 KiB
#include "molecules.h"
#include <iostream>
#include <vector>
#include <queue>

using namespace std;

int U, L, N;
int total = 0;

struct number {
    int n;
    int index;
    bool operator<(const number& other) const {
        return n < other.n;
    }
};

bool check() {
    return (total >= L && total <= U);
}


vector<int> q_to_v(queue<int>& q) {
    vector<int> retVec;
    for (;!q.empty();q.pop()) {
        retVec.push_back(q.front());
    }
    return retVec;
}

vector<int> find_subset(int l, int u, vector<int> w) {
    int n = w.size();
    N = n; U = u; L = l;
    vector<number> numbers;
    for (int i = 0; i < w.size(); i++) {
        number num;
        num.n = w[i];
        num.index = i;
        numbers.push_back(num);
    }
    sort(numbers.begin(),numbers.end());
    queue<int> ans;
    int testTot = 0;
    for(int i = 0; i < n; i++) {
        testTot += w[i];
    }

    if (testTot < l) { return vector<int>(0); }

    int i = n;
    while (total <= u) {
        i--;
        ans.push(numbers[i].index);
        total += numbers[i].n;
        if (check()) {
            return q_to_v(ans);
        }
    }

    vector<int> returnVector;
    int lower = n-i;
    while(lower >= 0 && i < n) {
        total -= numbers[i].n;
        total += numbers[lower].n;
        if(check()) {
            ans.push(numbers[lower].index);
            for (;!ans.empty();ans.pop()) {
                if (ans.front() == numbers[i].index) continue;
                returnVector.push_back(ans.front());
            }
            return q_to_v(ans);
        }
        total += numbers[i].n;
        total -= numbers[lower].n;
        lower--;
        i++;
    }
    return vector<int>(0);
}

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...