제출 #1163390

#제출 시각아이디문제언어결과실행 시간메모리
1163390AzaDetecting Molecules (IOI16_molecules)C++20
0 / 100
0 ms328 KiB
//AzaLE (Azamat Alisherov)
#include <bits/stdc++.h>
#include "molecules.h"
#define F first
#define S second
#define size(x) (int)x.size()
using namespace std;
vector <int> find_subset(int l, int r, vector<int> v){
	set<pair<int, int>> st; 
	//using set so no two identical values appear while searching within L and R
	//st.F is value;
	//st.S is index;
	vector <int> inds(size(v));
	//using this vector to retrieve answer if it exists-
	//-via backtracking indexes
	st.insert({0, -1});
	for(int i = 0; i < size(v); i++){
		int mn = l - v[i];
		//searching for appropriate minimum "adder" for L;
		auto it = st.lower_bound({mn, 0});
		if(it == st.end())it--;
		//cout << v[i] << "----> " << mn << " " << (*it).F << " " << (*it).S << endl;
		pair<int, int> ins;
		ins.F = (*it).F + v[i];
		inds[i] = (*it).S;
		ins.S = i;
		st.insert(ins);
		int mx = r - v[i];
		it = st.lower_bound({mx, 0});
			//searching for appropriate minimum "adder" for R;
			if(it == st.end())it--;
			ins.F = (*it).F + v[i];
			if((*it).S != i){
			inds[i] = (*it).S;
			ins.S = i;
			st.insert(ins);
		}
		st.insert({v[i], -1});
	}
	//for(auto [a, b]:st)cout << a << " " << b << endl;
	auto it = st.lower_bound({l, -1});
	int stind = -1;
	//stind (starting index) to backtrack the answer
	if((*it).F >= l and (*it).F <= r){
		stind = (*it).S;
	}
	it = st.upper_bound({r, -1});
	if(it != st.begin()){
		it--;
	}
	if((*it).F >= l and (*it).F <= r){
		stind = (*it).S;
	}
	for(int i = 0; i < size(v); i++){
		if(v[i] >= l and v[i] <= r){
			return {i};
		}
	}
	if(stind == -1){
		return {};
	}
	vector <int> ans;
	while(inds[stind] > 0){
		ans.push_back(stind);
		stind = inds[stind];
	}
	return ans;
}
/*

*/

컴파일 시 표준 에러 (stderr) 메시지

molecules.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
molecules_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#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...