제출 #1340308

#제출 시각아이디문제언어결과실행 시간메모리
1340308biblicaleagle선물 (IOI25_souvenirs)C++20
25 / 100
12 ms400 KiB
#include "souvenirs.h"
#include <utility>
#include <vector>

const int NMAX = 100;

bool isPriced[NMAX] = {false};
int count[NMAX] = {0};
long long P[NMAX] = {0};

void price(const int N, long long M) {
  auto [souvenirs, change] = transaction(M);
  long long sum = M-change;

  for (int souvenir : souvenirs) count[souvenir]++;
  
  while (souvenirs.size() > 1) {
    if (isPriced[souvenirs.back()])  {
      sum -= P[souvenirs.back()];
      souvenirs.pop_back();
    } else {
      price(N, sum / souvenirs.size());
    }
  }

  int top = souvenirs.front();
  P[top] = sum;
  isPriced[top] = true;
}

void buy_souvenirs(int N, long long P0) {
  P[0] = P0;
  isPriced[0] = true;

  for (int i = 1; i < N; i++) {
    if (!isPriced[i]) price(N, P[i-1]-1);
  }

  for (int i = 0; i < N; i++) {
    while(count[i] < i) {
      transaction(P[i]);
      count[i]++;
    }
  }
  return;
}
#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...