# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
789810 | Malix | Detecting Molecules (IOI16_molecules) | C++14 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "molecules.h"
#include <bits/stdc++.h>
using namespace std;
std::vector<int> find_subset(int l, int u, std::vector<int> w) {
int arrSize = w.size();
int gap = u - l;
vector<int> answer;
vector<int> answertemp;
vector<int> temp = w;
sort(temp.begin(), temp.end());
if(arrSize == 1){
if(w[0]<=u && w[0]>=l){
answer.push_back(0);
return answer;
}
return std::vector<int>(0);
}
if(temp[0] == temp[arrSize-1]){
int modval = u%w[0];
if(modval<=gap){
int termcount = (u-modval)/w[0];
if(arrSize>=termcount){
for(int i = 0; i < termcount; i++){
answer.push_back(i);
}
return answer;
}
}
return std::vector<int>(0);
}
if(temp[arr-1]-temp[0]==1){
int left = 0;
int right = 1;
int sum = temp[0];
answertemp.push_back(l);
while(sum<u){
sum += temp[right];
answertemp.push_back(right);
right++;
if(right > arrSize){
return std::vector<int>(0);
}
}
while(!(sum>=l && sum<=u)){
sum -= answertemp[0];
answertemp.erase(0);
sum += temp[right];
answertemp.push_back(right);
right++;
if(right > arrSize){
return std::vector<int>(0);
}
}
int asize = answertemp.size();
for(int i = 0; i < asize; i++){
int it = find(w.begin(), w.end(), answertemp[i]) - w.begin();
answertemp.erase(it);
answer.push_back(it)
}
return answer;
}
/*
if(temp[arrSize-1] - temp[0] == 1){
vector<int> smallarr;
vector<int> largearr;
int largeSize = 0;
for(int i = 0; i < arrSize; i++){
if(m[i]==temp[n-1]){
largearr.push_back(i);
largeSize++;
}
else{
smallarr.push_back(i);
smallSize++;
}
}
int mult = temp[0]*temp[n-1];
int modval = u%mult;
int reps = u/mult;
int smallmod = modval%temp[0];
int largemod = modval%temp[arrSize-1];
int smalldiv = modval/temp[0];
int largediv = modval/temp[arrSize-1];
if(smallmod==0 && smalldiv>=smallSize){
smallSize -= smalldiv;
for(int i = 0; i < smalldiv; i++){
answer.push_back(smallarr[i]);
smallarr.erase(i);
smallSize--;
}
}
else if(largemod==0 && largediv>=largeSize){
largeSize -= largediv;
for(int i = 0; i < largediv; i++){
answer.push_back(largearr[i]);
largearr.erase(i);
}
}
}
*/
return std::vector<int>(0);
}