#include <bits/stdc++.h>
#include "books.h"
#define tiii tuple<int,int,int>
using namespace std;
//
// --- 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<int> arr(n);
for(int i = 0; i < n; i++){
arr[i] = skim(i+1);
}
vector<int> chose(K);
int sum = 0;
for(int i = 0; i < K; i++){
chose[i] = i;
sum += arr[i];
}
if(sum > 2*A) {
impossible();
}
priority_queue<tiii> pq;
for(int i = K; i < n; i++){
tiii choice = {-1,-1,i};
for(int j = 0; j < K; j++){
int del = -arr[chose[j]]+arr[i];
if(sum+del > 2*A) continue;
choice = max(choice, {del, j, i});
}
pq.push(choice);
}
while(pq.size() && sum < A){
int delta, old, nxt;
tie(delta,old,nxt) = pq.top(); pq.pop();
// if not current
if(arr[nxt]-arr[chose[old]] != delta){
// reevaluate
tiii choice = {-1,-1,nxt};
for(int j = 0; j < K; j++){
if(sum-arr[chose[j]]+arr[nxt] > 2*A || -arr[chose[j]]+arr[nxt] <= 0) continue;
choice = max(choice, {-arr[chose[j]]+arr[nxt], j, nxt});
}
if(get<0>(choice) != -1){
pq.push(choice);
}
continue;
}
int oind = chose[old];
chose[old] = nxt;
sum += delta;
// this element may be reinserted
tiii choice = {-1,-1,oind};
for(int j = 0; j < K; j++){
if(sum-arr[chose[j]]+arr[oind] > 2*A || -arr[chose[j]]+arr[oind] <= 0) continue;
choice = max(choice, {-arr[chose[j]]+arr[oind], j, oind});
}
if(get<0>(choice) != -1){
pq.push(choice);
}
}
if(sum < A){
impossible();
}else{
for(int i = 0; i < K; i++) chose[i]++;
answer(chose);
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |