제출 #1257172

#제출 시각아이디문제언어결과실행 시간메모리
1257172MateiKing80선물 (IOI25_souvenirs)C++20
100 / 100
12 ms420 KiB
#include "souvenirs.h" #include <bits/stdc++.h> using namespace std; using ll = long long; #define int ll vector<int> costs; vector<int> luate; int n; void buy(int pret) { auto x = transaction(pret); int cost = pret - x.second; for (auto i : x.first) luate[i] ++; vector<int> suv; for (auto i : x.first) { if (costs[i] != -1) cost -= costs[i]; else suv.push_back(i); } while ((int)suv.size() > 1) { int ncost = cost - 1; for (int i = n - 2; i >= 0; i --) { if (costs[i] != -1 && costs[i + 1] == -1) ncost = min(ncost, costs[i] - 1); } if (ncost == cost - 1) { ncost = cost / (int)suv.size(); } buy(ncost); vector<int> nsuv; for (auto i : suv) { if (costs[i] != -1) cost -= costs[i]; else nsuv.push_back(i); } suv = nsuv; } if ((int)suv.size() == 1) costs[suv[0]] = cost; } void buy_souvenirs(signed N, int p0) { n = N; costs.assign(n, -1); luate.assign(n, 0); costs[0] = p0; for (int i = 1; i < n; i ++) if (costs[i] == -1) buy(costs[i - 1] - 1); for (int i = 1; i < n; i ++) while (luate[i] < i) { luate[i] ++; transaction(costs[i]); } }
#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...