Submission #1297602

#TimeUsernameProblemLanguageResultExecution timeMemory
1297602Hamed_GhaffariA Difficult(y) Choice (BOI21_books)C++20
100 / 100
1 ms400 KiB
#include <bits/stdc++.h>
#include "books.h"

using namespace std;

using ll = long long;
using big = __int128_t;

#define mid ((l+r)>>1)

//
// --- 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 Ss) {
    vector<ll> F;
    for(int i=1; i<=K; i++) F.push_back(skim(i));
    big sum = 0;
    for(ll i : F) sum += i;
    if(sum > 2*A) return impossible();
    if(sum>=A) {
        vector<int> ans;
        for(int i=1; i<=K; i++) ans.push_back(i);
        return answer(ans);
    }
    int r=N+1, l=K;
    while(r-l>1)
        (skim(mid)>=A ? r : l) = mid;
    if(r<=N && sum-F.back()+skim(r)<=2*A) {
        vector<int> ans;
        for(int i=1; i<K; i++) ans.push_back(i);
        ans.push_back(r);
        return answer(ans);
    }
    vector<ll> S;
    for(int i=r-K; i<r; i++) S.push_back(skim(i));
    for(int i=1; i<=K; i++) {
        sum -= F.back();
        F.pop_back();
        sum += S.back();
        S.pop_back();
        if(A <= sum && sum <= 2*A) {
            vector<int> ans;
            for(int j=1; j<=K-i; j++)
                ans.push_back(j);
            for(int j=r-i; j<r; j++)
                ans.push_back(j);
            return answer(ans);
        }
    }
    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...