Submission #943115

#TimeUsernameProblemLanguageResultExecution timeMemory
943115hmm789A Difficult(y) Choice (BOI21_books)C++14
60 / 100
2 ms1364 KiB
#include <bits/stdc++.h>
#include "books.h"
using namespace std;

void solve(int N, int K, long long A, int S) {
	vector<int> v;
    #define int long long
    int l = 1, r = N-K+1, m;
    int a[N+1];
    memset(a, -1, sizeof(a));
    while(l < r) {
		m = (l+r)/2;
		int sm = 0;
		for(int i = 0; i < K; i++) {
			if(a[m+i] == -1) a[m+i] = skim(m+i);
			sm += a[m+i];
		}
		if(sm < A) l = m+1;
		else r = m;
	}
	int sm = 0;
	for(int i = 0; i < K; i++) {
		if(a[l+i] == -1) a[l+i] = skim(l+i);
		sm += a[l+i];
	}
	if(sm >= A && sm <= 2*A) {
		for(int i = 0; i < K; i++) v.push_back(l+i);
		answer(v);
	} else if(sm >= A) {
		sm = 0;
		for(int i = 1; i < K; i++) {
			if(a[i] == -1) a[i] = skim(i);
			sm += a[i];
			v.push_back(i);
		}
		if(a[l+K-1] == -1) a[l+K-1] = skim(l+K-1);
		sm += a[l+K-1];
		v.push_back(l+K-1);
		if(sm <= 2*A) answer(v);
		else impossible();
	} else impossible();
	#undef int
}
#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...