Submission #775600

#TimeUsernameProblemLanguageResultExecution timeMemory
775600LudisseyDetecting Molecules (IOI16_molecules)C++14
69 / 100
34 ms5680 KiB
#include "molecules.h"
#include <iostream>
#include <string>
#include <set>
#include <map>
#include <cstring>
#include <unordered_map>
#include <vector>
#include <fstream>
#include <bitset>
#include <tuple>
#include <cmath>
#include <cstdint>
#include <stack>
#include <cassert>
#include <cstdio>
#include <queue>
#include <iterator>
#include <iomanip>
#include <algorithm>
#include <sstream>

using namespace std;
int l, u;
vector<pair<int, int>> w_sort;
vector<int> out;

std::vector<int> find_subset(signed _l, signed _u, std::vector<int> w) {
    l = _l;
    u = _u;
    int n = w.size();
    w_sort.resize(n);
    vector<int> prefx(n + 1);
    for (int i = 0; i < n; i++) w_sort[i] = { w[i],i };
    sort(w_sort.begin(), w_sort.end());
    for (int i = 1; i <= n; i++)
    {
        prefx[i] = prefx[i - 1] + w_sort[i - 1].first;
    }
    int i = 0, j = 0;
    bool res=false;
    while (i <= j && j < n) {
        int sum = prefx[j + 1] - prefx[i];
        if (sum >= l && sum <= u) {
            res = true;
            break;
        }
        else if (sum < l) {
            j++;
            if (j >= n) break;
        }
        else {
            if (i == j) j++;
            if (j >= n) break;
            i++;
        }
    }
    if (res) {
        for (int v = i; v <= j; v++) out.push_back(w_sort[v].second);
        return out;
    }
    return std::vector<int>(0);
}
#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...