제출 #850635

#제출 시각아이디문제언어결과실행 시간메모리
850635vjudge1A Difficult(y) Choice (BOI21_books)C++17
5 / 100
3086 ms2028 KiB
#include <bits/stdc++.h>
 
#include "books.h"
 
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.
//
 
#define ll long long
 
int n, k, s;
ll a;
vector<ll> v, pre;
vector<int> ans;
bool ended;
 
void generate(int idx, int prev, ll sum) {
    if (ended) return;
 
    if (sum > a*2) return;
 
    if (n-prev < k-idx) return;
 
    if (sum + pre[n] - pre[n-(k-idx)] < a) return;
 
    if (idx == k) {
        if (a <= sum && sum <= a*2) {
            ended = 1;
            return;
        }
        return;
    }
 
    for (int i = prev+1; i <= n; i++) {
        ans[idx] = i;
        generate(idx+1, i, sum + v[i]);
        if (ended) return;
    }
}
 
void solve(int N, int K, long long A, int S) {
    // TODO implement this function
    // impossible()
    // answer()
    // puedo hacer S preguntas
    // hay N libros
    // ordenados de mayor a menor por precio
    // tengo que comprar K
    // y la suma tiene que ser >= A y <= A*2
 
    n = N;
    k = K;
    a = A;
    s = S;
 
    v.resize(n+1);
    pre.resize(n+1, 0);
    for (int i = 1; i <= n; i++) {
        v[i] = skim(i);
        pre[i] = pre[i-1] + v[i];
    }
 
    ended = 0;
    ans.resize(k);
    generate(0, 0, 0ll);
    if (!ended) impossible();
    answer(ans);
}
#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...