이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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;
if (mx.back() >= l && mx.back() <= u) {
for (int i = 0; i < n; i++)
ans.push_back(i);
return 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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |