제출 #681564

#제출 시각아이디문제언어결과실행 시간메모리
681564YENGOYANA Difficult(y) Choice (BOI21_books)C++17
20 / 100
1 ms976 KiB
#include <bits/stdc++.h>

#include "books.h"

using namespace std;
using ll = long long;
//
// --- Sample implementation for the task books ---
//
// To compile this program with the sample grader, place:
//     books.h books_sample.cpp sample_grader.cpp
// in a single folder and run:
//     g++ books_sample.cpp sample_grader.cpp
// in this folder.
//

void solve(int n, int k, long long a, int s) {
	vector<ll> vec(n);
	ll sm = 0;
	for (int i = 0; i < k - 1; ++i) {
		vec[i] = skim(i + 1);
		sm += vec[i];
	}
	int l = k - 2, r = n - 1;
	bool f = 0;
	while (l + 1 < r) {
		int m = (l + r) / 2;
		ll b = vec[m];
		if (!b) b = skim(m + 1);
		vec[m] = b;
		if (b > a) r = m, f = 1;
		else l = m;
	}
	if ((sm + vec[r] < a || sm + vec[r] > 2 * a)) {
		vector<int> ids;
		for (int i = 0; i < k; ++i) {
			if (!vec[i]) vec[i] = skim(i + 1);
			ids.push_back(i);
		}
		for (int i = max(r - k + 1, k); i <= r; ++i) {
			if (!vec[i]) vec[i] = skim(i + 1);
			ids.push_back(i);
		}
		for (int i = 0; i + k - 1 < ids.size(); ++i) {
			sm = 0;
			for (int j = 0; j < k; ++j) {
				sm += vec[ids[i + j]];
			}
			if (sm >= a && sm <= 2 * a) {
				vector<int> ans;
				for (int j = 0; j < k; ++j) ans.push_back(ids[i + j] + 1);
				answer(ans);
				return;
			}
		}
		sm = 0;
		for (int i = 0; i < k; ++i) sm += vec[i];
		l = k - 2, r = n - 1;
		while (l + 1 < r) {
			int m = (l + r) / 2;
			long long b = vec[m];
			if (!b) b = skim(m + 1);
			vec[m] = b;
			if (sm + b >= a) r = m;
			else l = m;
		}
		if(sm < a || sm > 2 * a) impossible();
		else {
			vector<int> ans;
			for (int i = 1; i <= k - 1; ++i) ans.push_back(i);
			ans.push_back(r + 1);
			answer(ans);
		}
		return;
	}
	vector<int> ans;
	for (int i = 1; i < k; ++i) ans.push_back(i);
	ans.push_back(r + 1);
	answer(ans);
}

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

books.cpp: In function 'void solve(int, int, long long int, int)':
books.cpp:44:29: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   44 |   for (int i = 0; i + k - 1 < ids.size(); ++i) {
      |                   ~~~~~~~~~~^~~~~~~~~~~~
books.cpp:25:7: warning: variable 'f' set but not used [-Wunused-but-set-variable]
   25 |  bool f = 0;
      |       ^
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...