제출 #415880

#제출 시각아이디문제언어결과실행 시간메모리
415880BlagojceA Difficult(y) Choice (BOI21_books)C++14
0 / 100
19 ms200 KiB
#include <bits/stdc++.h>
#define fr(i, n, m) for(int i = (n); i < (m); i ++)
#define pb push_back
#define st first
#define nd second
#define pq priority_queue
#define all(x) begin(x), end(x)
  
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<ll,ll> pii;
const ll inf = 1e18;
const int i_inf = 1e9;
const ll mod = 1e9+7;

mt19937 _rand(time(NULL));
const int mxn = 2e5;

#include "books.h"

ll pref[10];

vector<pair<ll,int> > v;


void iter(ll A, int K){
	fr(mask, 0, (1<<((int)v.size()))){
		if(__builtin_popcount(mask) != K) continue;
		
		ll sum = 0;
		fr(j, 0, (int)v.size()){
			if(mask&(1<<j)) sum += v[j].st;
		}
		if(A <= sum && sum <= 2*A){
			vector<int> sol;
			fr(j, 0, (int)v.size()){
				if(mask&(1<<j))sol.pb(v[j].nd+1);
			}
			answer(sol);
		}
	}
	impossible();
}



void solve(int N, int K, long long A, int S) {
	if(N <= 10){
		fr(i, 0, N){
			v.pb({skim(i+1), i});
		}
		iter(A, K);
	}
	else{
		fr(i, 0, 10){
			pref[i] = skim(i+1);
			v.pb({pref[i], i});
		}
		if(pref[0] < A){
			
			int l = 0;
			int r = N-1;
			while(l < r){
				int mid = (l + r + 1)/2;
				int val = skim(mid+1);
				if(val < A){
					l = mid;
				}
				else{
					r = mid-1;
				}
			}
			
			
			
			int k = l;
			
			
			
			
			/*for(int b = (N+1)/2; b >= 1; b /= 2){ 
				while(b + k < N && skim(b + k + 1) < A) k += b;
			}*/
			for(int i = k; i >= 10 && k - i < 10; i --){
				v.pb({skim(i+1), i});
			} 
			
			if(k + 1 < N){
				v.pb({skim(k+2), k+1});
			}
			iter(A, K);
		}
		else{
			if(S == 1 && pref[0] <= 2*A){
				answer({1});
			}
			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...