제출 #943095

#제출 시각아이디문제언어결과실행 시간메모리
943095teacupA Difficult(y) Choice (BOI21_books)C++14
0 / 100
1 ms1112 KiB
#include <bits/stdc++.h>

#include "books.h"

using namespace std;
#define ll long long
#define ii pair<int,int>
#define vi vector<int>
typedef vector<ii> vii;
//
// --- 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
    vector<long long> V(N+5);
    vector<int> ans;
    V.assign(V.size(), -1);
    long long sum=0;
    for (int i=1; i<=K; i++){
		V[i]=skim(i);
		sum+=V[i];
		ans.push_back(V[i]);
	}
	if (sum>2*A){
		impossible();
	}else if (sum>=A){
		//answer!!
		answer(ans);
	}else{
		//sum<A
		ans.clear();
		//binary search from K+1 to N
		ll L=1, R=N-K+1, M;
		while (L<R) {
			M = (L+R)/2;
			sum = 0;
			for (ll i=0; i<K; i++){
				if (V[M+i]==-1) V[M+i] = skim(M+i);
				sum += V[M+i];
			}
			if (sum < A) L = M+1;
			else R = M;
		}
		sum = 0;
		for (ll i=0; i<K; i++){
			if (V[L+i]==-1) V[L+i] = skim(L+i);
			sum += V[L+i];
			ans.push_back(L+i);
		}
		if(sum>=A && sum<=2*A){
			answer(ans);
		}else{
			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...