Submission #1368653

#TimeUsernameProblemLanguageResultExecution timeMemory
1368653lizi14A Difficult(y) Choice (BOI21_books)C++20
100 / 100
0 ms412 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#include"books.h"
#define pb push_back
#define f first
#define ss second
void solve(int N, int K, long long A, int S){
    
    long long l=1,r=N;
    long long ans=-1;
    ll liam_with_blond_hair_was_better=-1;
    vector<pair<ll,ll>>x(K+1,{0,0});
    
    //x[N]=bol;
    while(l<=r){
        long long m=(l+r)/2;
        long long bati=skim(m);
        
        if(bati>A){
            ans=bati;
            r=m-1;
            liam_with_blond_hair_was_better=m;
        }
        else{
            l=m+1;
        }
    }
    ll sum=0;
    for(int i=1; i<=K; i++){
        if(x[i].f==0){
            ll a=skim(i);
            x[i].f=a;
            x[i].ss=i;
        }
        sum+=x[i].f;
    }
    if(sum>2*A){
        impossible();
        return;
    }
    if(sum>=A && sum<=2*A){
        vector<int>bati;
        for(int i=1; i<=K; i++){
            bati.pb(x[i].ss);
        }
        answer(bati);
        return;
    }
    ll sss=sum-x[K].f;
    vector<int>as;
    
    if(ans!=-1){
        
        if(sss+ans>=A && sss+ans<=2*A){
    		for(int i=1; i<=K-1; i++){
    			as.push_back(i);
			}
			as.push_back(liam_with_blond_hair_was_better);
			answer(as);
			return;
		}
		
    }
    else{
        liam_with_blond_hair_was_better=N+1;
    }
    vector<pair<ll,ll>>vec(K+1);
    ll ii=1;
    for(int i=liam_with_blond_hair_was_better-1; i>=liam_with_blond_hair_was_better-K; i--){
        vec[ii].f=skim(i);
        vec[ii].ss=i;
        ii++;
    }
    vector<int>liam;
    for(int i=1; i<=K; i++){
        sum+=vec[i].first-x[i].f;
        x[i].first=vec[i].first;
        x[i].second=vec[i].second;
        if(sum>=A and sum<=2*A){
        	for(int i=1; i<=K; i++){
        		liam.push_back(x[i].second);
			}
            answer(liam);
			return;
        }
    }
    impossible();
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...