Submission #798274

#TimeUsernameProblemLanguageResultExecution timeMemory
798274LiudasDetecting Molecules (IOI16_molecules)C++17
31 / 100
1058 ms912 KiB
#include <bits/stdc++.h>

using namespace std;
vector<int> find_subset(int L, int R, vector<int> M){
    map<int, queue<int>> places;
    int N = M.size();
    for(int i = 0; i < N; i ++){
        places[M[i]].push(i);
    }
    map<int, int> sums;
    sums[0] = 0;
    vector<int> ord(N);
    iota(ord.begin(), ord.end(), 0);
    sort(ord.begin(), ord.end(), [&](int a, int b){return M[a] < M[b];});
    for(int i : ord){
        map<int, int> sums1;
        for(auto [l ,r] : sums){
            if(sums.find(l + M[i]) == sums.end() && l + M[i] <= R)
            sums1[l + M[i]] = i;
        }
        for(auto [l, r] : sums1){
            sums[l] = r;
            if(L <= l && l <= R){
                i = N;
                break;
            }
        }
    }
    vector<int> p;
    for(int i = L; i <= R; i ++){
        if(sums.find(i) != sums.end()){
            int t = i;
            while(t){
                p.push_back(sums[t]);
                t -= M[sums[t]];
            }
            return p;
        }
    }
    return p;
}
#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...