제출 #1249883

#제출 시각아이디문제언어결과실행 시간메모리
1249883_abaatar선물 (IOI25_souvenirs)C++20
4 / 100
12 ms412 KiB
#include "souvenirs.h" #include <utility> #include <vector> #include <cassert> #include <algorithm> #include <numeric> #include <iostream> #include <cstring> using namespace std; const int Ma = 5e2 + 10; using ll = long long; int sold[111]; void buy_souvenirs(int N, long long P0) { for (int i = 1; i < N; i++) sold[i] = i; ll hi = P0; for (int i = 1; i < N; i++) { hi -= 1; while (sold[i] > 0) { auto res = transaction(hi); for (auto x : res.first) { sold[x]--; } } hi = hi >> 1; // P[i] --g olchuul hi = (P[i] - 1) << 1 geed duuslaa } return; for (int i = 1; i < N; i++) sold[i] = i; ll cur = P0 - 1; bool hasOne = false; for (int i = 1; i < N; i++) { if (i == N - 1 && hasOne == true) { while (sold[N - 1]-- > 0) transaction(1); return; } auto res = transaction(cur); sold[i]--; if (res.second == 1) { // no price 1 and p[i] = p[i - 1] - 2 while (sold[i]-- > 0) { transaction(cur - 1); } cur -= 2; } else { // res.second = 0 if (res.first.size() == 1) { // p[i] = p[i - 1] - 1 while (sold[i]-- > 0) { transaction(cur); } cur -= 1; } else { // p[i] = p[i - 1] - 2 and hasOne = true hasOne = true; sold[N - 1]--; while (sold[i]-- > 0) { transaction(cur - 1); } cur -= 2; } } } }
#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...