이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "molecules.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<int> find_subset(int l, int u, vector<int> wx) {
ll n = wx.size();
vector<ll> minval(n);
vector<ll> maxval(n);
vector<pair<int,int>> w(n);
for (int i = 0; i<n; i++){
w[i]={wx[i],i};
}
sort(w.begin(),w.end());
ll curmin = 0;
ll curmax = 0;
for (int i = 0; i<n; i++){
curmin+=w[i].first;
curmax+=w[n-1-i].first;
minval[i]=curmin;
maxval[i]=curmax;
}
for (int i = 0; i<n; i++){
cout<<minval[i]<<' '<<maxval[i]<<'\n';
}
for (int i = 0; i<n; i++){
if (l<=minval[i]&&minval[i]<=u){
vector<int> ans(i+1);
for (int x = 0; x<=i; x++){
ans[x]=w[x].second;
}
assert(ans.size()>0);
return ans;
} else if (l<=maxval[i]&&maxval[i]<=u){
vector<int> ans(i+1);
for (int x = n-1; x>=n-1-i; x--){
ans[n-1-x]=w[x].second;
}
assert(ans.size()>0);
return ans;
} else if (l<=minval[i]&&maxval[i]<=u){
int lptr = i;
int rptr = n-1;
ll s = minval[i];
while (!(l<=s&&s<=u)){
s-=w[lptr].first;
s+=w[rptr].first;
lptr--;
rptr--;
}
vector<int> ans;
for (int i = 0; i<=lptr; i++){
ans.push_back(w[i].second);
}
for (int i = rptr+1; i<n; i++){
ans.push_back(w[i].second);
}
assert(ans.size()>0);
return ans;
} else {
assert(maxval[i]<l||u<minval[i]);
}
}
return vector<int>(0);
}
| # | 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... |