제출 #129038

#제출 시각아이디문제언어결과실행 시간메모리
129038teomrnDetecting Molecules (IOI16_molecules)C++14
100 / 100
320 ms27512 KiB
#include "molecules.h"
#include <bits/stdc++.h>
using namespace std;


std::vector<int> find_subset(int l, int u, std::vector<int> w) {
	int n = w.size();
	map <int, vector <int>> ids;
	for (int i = 0; i < w.size(); i++)
		ids[w[i]].push_back(i);

	sort(w.begin(), w.end());
	vector <long long> sp(n + 1);
	for (int i = 1; i < sp.size(); i++)
		sp[i] = sp[i - 1] + w[i - 1];

	for (int nr = 1; nr <= n; nr++) {
		if (sp[nr] > u || sp[n] - sp[n - nr] < l)
			continue;
		/// acum sunt in bucata buna
		int from = 1;
		while (sp[from + nr - 1] - sp[from - 1] < l)
			from++;
		assert(sp[from + nr - 1] - sp[from - 1] <= u);

		vector <int> ans;
		for (int i = from - 1; i < from + nr - 1; i++) {
			ans.push_back(ids[w[i]].back());
			ids[w[i]].pop_back();
		}
		return ans;
	}
	return vector <int> ();
}

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

molecules.cpp: In function 'std::vector<int> find_subset(int, int, std::vector<int>)':
molecules.cpp:9:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < w.size(); i++)
                  ~~^~~~~~~~~~
molecules.cpp:14:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 1; i < sp.size(); i++)
                  ~~^~~~~~~~~~~
#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...