제출 #1251117

#제출 시각아이디문제언어결과실행 시간메모리
1251117wng_선물 (IOI25_souvenirs)C++20
25 / 100
12 ms412 KiB
#include <bits/stdc++.h> #include "souvenirs.h" using namespace std; using ll = long long; using res_type = pair<vector<int>, ll>; void buy_souvenirs(int N, ll P0) { res_type res; if (N == 2) { // s1 res = transaction(P0 - 1); return; } if (N == 3) { // s4 res = transaction(P0 - 1); bool bought_p2 = find(res.first.begin(), res.first.end(), 2) != res.first.end(); ll change = res.second; ll used = (P0 - 1) - change; // for (int i : res.first) // cerr << i << ' '; // cerr << '\n'; if (bought_p2) { ll p1 = used / 2 + 1; // note, floordiv transaction(used - p1); } else { // then (p0 - 1) was not enough? ll p1 = used; transaction(p1 - 1); transaction(p1 - 1); } return; } if (P0 == N) { // s2 for (int i = 1; i < N; i++) { int price = N - i; for (int amt = 1; amt <= i; amt++) { transaction(price); } } return; } vector<ll> cnt(N + 1); for (int i = 1; i < N; i++) { cnt[i] = i; } ll prv = P0; ll P_i = P0; ll to_buy = 0; for (int i = 1; i < N; i++) { P_i = max(1ll, prv - 2); auto [bought, change] = transaction(P_i); for (int tp : bought) { cnt[tp]--; } if (find(bought.begin(), bought.end(), i) != bought.end()) { P_i = max(1ll, prv - 2); } else { P_i = max(1ll, prv - 1); } while (cnt[i] > 0) { auto [bought, change] = transaction(P_i); for (int tp : bought) { cnt[tp]--; } } prv = P_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...