Submission #1354089

#TimeUsernameProblemLanguageResultExecution timeMemory
1354089lizi14A Difficult(y) Choice (BOI21_books)C++20
0 / 100
0 ms676 KiB
#include <bits/stdc++.h>
#include"books.h"

using namespace std;

void solve(int N, int K, long long A, int S) {
    int fi=skim(1);
    int bol=skim(N);
    if(fi>2*A){
        impossible;
        //cout<<"II"<<endl;
        return;
    }
    int l=1,r=N;
    int ans=-1;
    while(l<=r){
        int m=(l+r)/2;
        int bati=skim(m);
        if(bati>=A){
            ans=m;
            r=m-1;
        }
        else{
            l=m+1;
        }
    }
    if(ans==-1){
        ans=N;
        int x[N+1];
        fill(x,x+N+1,0);
        x[0]=fi;
        x[N]=bol;
        for(int i=2; i<=K; i++){
            int a=skim(i);
            x[i]=a;
        }
        for(int i=ans-1; i>=ans-K; i--){
            int a=skim(i);
            x[i]=a;
        }
        int sum=0;
        for(int i=1; i<=K; i++){
            sum+=x[i];
        }
        if(sum>=A && sum<=2*A){
            vector<int>anss;
            for(int i=1; i<=K; i++){
                anss.push_back(i);
            }
            answer(anss);
            //cout<<"1"<<endl;
            return;
        }
        vector<int>g;
        for(int i=1; i<=K; i++){
            sum+=abs(x[i]-x[ans-K-i+1]);
            g.push_back(ans-K-i+1);
            if(sum>=A && sum<=2*A){
                vector<int>ja=g;
                for(int j=i+1; j<=K; j++){
                    ja.push_back(j);
                }
                answer(ja);
                //cout<<2<<endl;
                return;
            }
            //cout<<sum<<endl;
        }
        impossible;
        //cout<<"$"<<endl;
        return;
    }
    else{
        int x[N+1];
        fill(x,x+N+1,0);
        x[0]=fi;
        x[N]=bol;
        for(int i=2; i<=K; i++){
            int a=skim(i);
            x[i]=a;
        }
        for(int i=ans-1; i>=ans-K; i--){
            int a=skim(i);
            x[i]=a;
        }
        int sum=0;
        for(int i=1; i<=K; i++){
            sum+=x[i];
        }
        if(sum>=A && sum<=2*A){
            vector<int>anss;
            for(int i=1; i<=K; i++){
                anss.push_back(i);
            }
            answer(anss);
            //cout<<3<<endl;
            return;
        }
        vector<int>g;
        for(int i=1; i<=K; i++){
            sum+=abs(x[i]-x[ans-K-i+1]);
            g.push_back(ans-K-i+1);
            if(sum>=A && sum<=2*A){
                vector<int>ja=g;
                for(int j=i+1; j<=K; j++){
                    ja.push_back(j);
                }
                answer(ja);
                //cout<<4<<endl;
                return;
            }
        }
        int gag=0;
        vector<int>o;
        gag+=x[ans];
        o.push_back(ans);
        for(int i=1; i<=K-1; i++){
            gag+=x[i];
            o.push_back(i);
        }
        if(gag>=A && gag<=2*A){
            answer(o);
            //cout<<4<<endl;
            return;
        }
        impossible;
        //cout<<"?"<<endl;
        return;
    }
}
#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...