제출 #1122919

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

#include "books.h"
#define vi vector<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);
    int lo = 0;
    int hi = N - K;
    while(lo < hi){
    	int mid = lo + (hi - lo)/2;
    	int cur = 0;
    	for(int i = mid; i<mid + K; i++){
    		if(v[i] == -1){
    			v[i] = skim(i+1);
    		}
    		cur += v[i];
    	}
    	if(cur >= A){
    		hi = mid;
    	}
    	else lo = mid + 1;
    }
    if(lo == 0){
    	int cur = 0;
    	f0r(i, K){
    		cur += v[i];
    	}
    	if(cur > 2 * A)impossible();
    	else{
    		vi ans;
    		f0r(i, K)ans.pb(i + 1);
    		answer(ans);
    	}
    }
    else{
    	if(v[lo-1] == -1){
    		v[lo-1] = skim(lo);
    	}
    	bool ok = 0;
    	int sum = 0;
    	for(int i = lo-1; i<=lo + K - 1; i++){
    		sum += v[i];
    	}
    	int smol = 1e9;
    	for(int i = lo-1; i<=lo + K - 1; i++){
    		if(sum - v[i] >= A && sum - v[i] <= 2 * A){
    			vi ans;
    			for(int j = lo-1; j<=lo + K - 1; j++){
    				if(j != i)ans.pb(j+1);
    			}
    			ok = 1;
    			answer(ans);
    			break;
    		}
    		else if(sum - v[i] < A){
    			smol = min(smol, i);
    		}
    	}
    	if(!ok){
    		if(lo + K >= N)impossible();
    		else{
    			if(v[lo + K] == -1){
    				v[lo + K] = skim(lo + K + 1);
    			}
    			int thing = sum - v[smol] - v[lo + K - 1] + v[lo + K];
    			if(thing >= A && thing <= 2 * A){
    				vi ans;
    				for(int i = i-1; i<=lo+K; i++){
    					if(i != lo + K - 1 && i != smol){
    						ans.pb(i+1);
    					}
    				}
    				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...