Submission #1123084

#TimeUsernameProblemLanguageResultExecution timeMemory
1123084thelegendary08A Difficult(y) Choice (BOI21_books)C++20
100 / 100
1 ms1180 KiB
#include <bits/stdc++.h>

#include "books.h"
#define ll long long int
#define vi vector<long long int>
#define pb push_back
#define f0r(i,n) for(int i = 0; i<n; i++)

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) {
    // TODO implement this function
    vi v(N, -1);
    ll s = 0;
	f0r(i, K - 1){
		if(v[i] == -1)v[i] = skim(i + 1);
		s += v[i];
	}
	int lo = 0;
	int hi = N;
	while(lo < hi){
		int mid = lo + (hi - lo)/2;
		if(v[mid] == -1)v[mid] = skim(mid + 1);
		if(v[mid] > A){
			hi = mid;
		}
		else lo = mid + 1;
	}
	if(lo != N && s + v[lo] >= A && s + v[lo] <= 2 * A){
		vector<int> ans;
		f0r(i, K-1)ans.pb(i + 1);
		ans.pb(lo + 1);
		answer(ans);
	}
	else{
		//cout<<lo<<'\n';
		//solve from 0 to lo-1
		if(lo < K)impossible();
		else{
			if(v[K-1] == -1)v[K-1] = skim(K);
			for(int i = lo - 1; i>=lo - K; i--){
				if(v[i] == -1)v[i] = skim(i + 1);
			}
			/*
			vi w;
			f0r(i, K)w.pb(v[i]);
			for(int i = lo - 1; i>=lo - K; i--){
				w.pb(v[i]);
			}
			*/
			f0r(i, K+1){
				ll cur = 0;
				vector<int>ans;
				f0r(j, i){
					cur += v[j];
					//cout<<v[j]<<' ';
					ans.pb(j + 1);
				}
				int cnt = K - i;
				for(int j = lo - 1; j>= lo - cnt; j--){
					cur += v[j];
					ans.pb(j + 1);
				}
				
				if(cur >= A && cur <= 2 * A){
					answer(ans);
				}
			}
			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...