제출 #1251112

#제출 시각아이디문제언어결과실행 시간메모리
1251112wng_선물 (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 P_i = P0; ll to_buy = 0; for (int i = 1; i < N; i++) { ll bought, change; while (cnt[i] > 0) { res = transaction(P_i - 1); for (int tp : res.first) { // cerr << tp << ' '; cnt[tp]--; } // cerr << '\n'; if (res.first.size() > 1) { P_i--; } } 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...