Submission #1224468

#TimeUsernameProblemLanguageResultExecution timeMemory
1224468JerA Difficult(y) Choice (BOI21_books)C++20
0 / 100
2 ms4260 KiB
#include <bits/stdc++.h>

#include "books.h"

typedef long long ll;

using namespace std;

const int MAXN = 10e5 + 5;
int n, k, a;
int books[MAXN];

#define get_max(b) b * k + (k - 1) * a
#define get_min(b) b * k + ((k - 1) * k / 2)

ll get(int i){
	if (books[i] == -1)
		books[i] = skim(i);
	return books[i];
}

void solve(int N, int K, long long A, int S) {
	memset(books, -1, sizeof books);

	n = N, k = K, a = A;

    int l = 1, h = n;
	ll curr, sum;

	while (l < h){
		int m = (l + h) / 2;

		if (m + k > n)
			m = n - k + 1;

		curr = get(m);

		if (get_max(curr) < a)
			l = m + 1;
		else if (get_min(curr) > 2 * a)
			h = m - 1;

		else{
			sum = 0;
			for (int i = m; i < m + k; i++) sum += get(i);
			
			if (sum >= a and sum <= 2 * a)
			{
				vector<int> res;
				for (int i = m; i < m + k; i++) res.push_back(i);
				answer(res);
				return;
			}
		}
	}

	impossible();
}
#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...