Submission #1334354

#TimeUsernameProblemLanguageResultExecution timeMemory
1334354zhehanA Difficult(y) Choice (BOI21_books)C++20
0 / 100
0 ms344 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.
//

void solve(int N, int K, long long A, int S) {
  // TODO implement this function
  int l = 1, r = N, m, o;
  while (l < r) {
    m = (l + r) / 2;
    o = skim(m);
    if (o == A) {
      l = m;
      break;
    }
    if (o < A) {
      l = m + 1;
    } else {
      r = m;
    }
  }
  int pos_atleastA = l;
  int val_atleastA = skim(l);
  int pos_lessthenA = l - 1;
  vector<int> ind(K, 0);
  vector<int> firstk(K, 0);
  vector<int> lastk(K, 0);
  int sum = 0;
  for (int i = 0; i < K; ++i) {
    firstk[i] = skim(i + 1);
    ind[i] = i + 1;
    sum += firstk[i];
  }
  if (sum > 2 * A) {
    impossible();
  }
  if (val_atleastA >= A) {
    int tsum = sum - firstk[K - 1];
    tsum += val_atleastA;
    ind[K - 1] = pos_atleastA;
    if (tsum <= 2 * A) {
      answer(ind);
    }
  } else {
    pos_lessthenA = l;
  }
  for (int i = 0; i < K; ++i) {
    lastk[i] = skim(pos_lessthenA - K + i);
  }
  int i = 0;
  while (sum < A && i < K) {
    sum = sum - firstk[i] + lastk[i];
    ind[i] = pos_lessthenA - K + i;
  }
  answer(ind);
}
#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...