제출 #1354165

#제출 시각아이디문제언어결과실행 시간메모리
1354165putuputuA Difficult(y) Choice (BOI21_books)C++20
0 / 100
0 ms356 KiB
#include <bits/stdc++.h>
#include"books.h"
using namespace std;
void solve(int N, int K, long long A, int S){
	int l=1, r=N;
    int anss=-1;
    int m;
    int mm=-1;
    while(l<=r){
        m=(l+r)/2;
        int num=skim(m);
        if(num>A){
            r=m-1;
            anss=num;
            mm=m;
        }else{
            l=m+1;
        }
    }
    vector <pair<int, int> > vec(K+1, {0,-1});
    int sum=0;
    for(int i=1; i<=K; i++){
        int x=skim(i);
        vec[i].first=x;
        vec[i].second=i;
        sum+=x;
    }
    if(sum>2*A){
        impossible();
        return;
    }
    vector<int> abb;
    if(sum>=A and sum<=2*A){
    	for(int i=1; i<=K; i++){
    		abb.push_back(vec[i].second);
		}
		answer(abb);
		return;
	}
    int summ=sum-vec[K].first;
    vector<int> as;
    if(anss!=-1){
    	if(summ+anss>=A and summ+anss<=2*A){
    		for (int i=1; i<=K-1; i++){
    			as.push_back(i);
			}
			as.push_back(mm);
			answer(as);
			return;
		}
	}
    vector<pair<int, int> > vecc(K+1, {0, -1});
    if(anss==-1){
    	mm=N+1;
	}
	int idx=1;
    for(int i=mm-1; i>=mm-K; i--){
        int x=skim(i);
        vecc[idx].first=x;
        vecc[idx].second=i;
        idx++;
    }
    vector<int> idxx;
    for(int i=1; i<=K; i++){
        sum+=vecc[i].first-vec[i].first;
        vec[i].first=vecc[i].first;
        vec[i].second=vecc[i].second;
        if(sum>=A and sum<=2*A){
        	for(int i=1; i<=K; i++){
        		idxx.push_back(vec[i].second);
			}
            answer(idxx);
			return;
        }
    }
    impossible();
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…