Submission #1345766

#TimeUsernameProblemLanguageResultExecution timeMemory
1345766kawhiet선물 (IOI25_souvenirs)C++20
39 / 100
8 ms344 KiB
#include <bits/stdc++.h>
#include "souvenirs.h"
using namespace std;

void buy_souvenirs(int n, long long p0) {
  if (n == 3) {
  auto [v, rem] = transaction(p0 - 1);
    if (v.size() == 2) {
      long long sum = p0 - 1 - rem;
      transaction(sum / 2);
    } else {
      long long p1 = p0 - 1 - rem;
      transaction(p1 - 1);
      transaction(p1 - 1);
    }
    return;
  }
  long long prv = p0;
  auto [v, rem] = transaction(p0 - 1);
  vector<int> cnt(n);
  iota(cnt.begin(), cnt.end(), 0);
  for (auto j : v) {
    cnt[j]--;
  }
  if (v.size() == 2) {
    prv -= 2;
    for (int i = 2; i < n; i++ ){
      auto [v, r] = transaction(prv - 1);
      if (v.size() == 2) {
        prv -= 2;
      } else {
        prv--;
      }
      for (auto j : v) {
        cnt[j]--;
      }
      while (cnt[i]--) {
        transaction(prv);
      }
    }
  } else {
    if (rem == 1) {
      prv -= 2;
    } else {
      prv--;
    }
    for (int i = 2; i < n; i++) {
      auto [v, r] = transaction(prv - 1);
      if (r == 1) {
        prv -= 2;
      } else {
        prv--;
      }
      for (auto j : v) {
        cnt[j]--;
      }
      while (cnt[i]--) {
        transaction(prv);
      }
    }
  }
  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...