제출 #1000331

#제출 시각아이디문제언어결과실행 시간메모리
1000331overwatch9Detecting Molecules (IOI16_molecules)C++17
19 / 100
1 ms436 KiB
#include "molecules.h"
#include <bits/stdc++.h>
using namespace std;
vector<int> find_subset(int l, int u, std::vector<int> w) {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n = w.size();
    vector <int> mn(n), mx(n);
    for (int i = 0; i < n; i++) {
        mn[i] += w[i];
        mx[i] += w[n - i - 1];
        if (i > 0) {
            mn[i] += mn[i-1];
            mx[i] += mx[i-1];
        }
    }
    vector <int> ans;
    for (int i = 0; i < n; i++) {
        if (mn[i] >= l && mn[i] <= u) {
            for (int j = 0; j <= i; j++)
                ans.push_back(j);
            return ans;
        }
        auto it = lower_bound(mx.begin(), mx.end(), l - mn[i]);
        if (it != mx.end() && mn[i] + *it >= l && mn[i] + *it <= u && int(it - mx.begin()) + i + 1 < n) {
            for (int j = 0; j <= i; j++)
                ans.push_back(j);
            int x = it - mx.begin();
            for (int j = 0; j <= x; j++)
                ans.push_back(n - j - 1);
            return ans;
        }
    }
    for (int i = 0; i < n; i++) {
        if (mx[i] >= l && mx[i] <= u) {
            for (int j = 0; j <= i; j++)
                ans.push_back(n - j - 1);
            return ans;
        }
        auto it = lower_bound(mn.begin(), mn.end(), l - mx[i]);
        if (it != mn.end() && mx[i] + *it >= l && mx[i] + *it <= u && int(it - mn.begin()) + i + 1 < n) {
            int x = it - mn.begin();
            for (int j = 0; j <= x; j++)
                ans.push_back(j);
            for (int j = 0; j <= i; j++)
                ans.push_back(n - j - 1);
            return ans;
        }
    }
    return ans;
}
#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...