제출 #1302412

#제출 시각아이디문제언어결과실행 시간메모리
1302412yuichiro17A Difficult(y) Choice (BOI21_books)C++20
0 / 100
2 ms1080 KiB
#include <bits/stdc++.h>
#include "books.h"
using namespace std;
using ll = long long;

vector<ll>memo;
int n,k,s;
ll a;
ll ask(int i){
    if(memo[i]==-1)return memo[i]=skim(i+1);
    else return memo[i];
}
int bs(ll x,int l,int r){
    if(l==r)return l;
    int m=(l+r+1)/2;
    ll y=ask(m);
    if(x==y)return m;
    else if(x<y)return bs(x,l,m-1);
    else return bs(x,m,r);
}

void solve(int N, int K, long long A, int S) {
    n=N,k=K,a=A,s=S;
    memo=vector<ll>(n,-1);
    int x=bs(a/k,0,n-1);
    vector<pair<ll,int>>v;
    for(int i=max(0,x-10);i<min(n,x+11);i++){
        v.push_back({ask(i),i+1});
    }
    for(int i=0;i+k<v.size();i++){
        ll sum=0;
        vector<int>ans;
        for(int j=i;j<i+k;j++){
            sum+=v[j].first;
            ans.push_back(v[j].second);
        }
        if(sum>=a&&sum<=2*a){
            answer(ans);
            return;
        }
    }
    impossible();
    vector<int>ans={bs(a,0,n-1)};
    ll sum=ask(ans[0]);
    for(int i=0;i<k-1;i++){
        sum+=ask(i);
        ans.push_back(i+1);
    }
    if(sum>=a&&sum<=2*a){
        answer(ans);
        return;
    }
    return;
}
#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...