Submission #1250540

#TimeUsernameProblemLanguageResultExecution timeMemory
1250540machianhSouvenirs (IOI25_souvenirs)C++20
0 / 100
7 ms512 KiB
#include "souvenirs.h" #include <vector> #include <numeric> #include <algorithm> // Hàm kiểm tra xem một giá trị có trong vector đã sắp xếp không bool isInVector(const std::vector<int>& vec, int val) { auto it = std::lower_bound(vec.begin(), vec.end(), val); return (it != vec.end() && *it == val); } void buy_souvenirs(int N, long long P0) { // --- Giai đoạn 1: Khám phá giá tiền --- std::vector<long long> P; P.push_back(P0); for (int i = 1; i < N; ++i) { long long high = P.back() - 1; long long low = 1; long long found_price = P.back(); while (low <= high) { long long mid = low + (high - low) / 2; // Thực hiện giao dịch để kiểm tra P[i] std::pair<std::vector<int>, long long> result = transaction(mid); std::vector<int> bought_items = result.first; // Vì mid < P[i-1], các món 0..i-1 sẽ không được mua. // Ta chỉ cần kiểm tra món i có được mua không. if (isInVector(bought_items, i)) { // mid >= P[i]. Giá có thể là mid hoặc nhỏ hơn. found_price = mid; high = mid - 1; } else { // mid < P[i]. Cần giá cao hơn. low = mid + 1; } } P.push_back(found_price); } // --- Giai đoạn 2: Mua hàng theo lô --- std::vector<long long> to_buy_prices; for (int i = 1; i < N; ++i) { for (int j = 0; j < i; ++j) { to_buy_prices.push_back(P[i]); } } // Sắp xếp giá giảm dần (tương đương index i tăng dần), // danh sách đã được tạo theo thứ tự này rồi. if (to_buy_prices.empty()) { return; } long long current_batch_sum = 0; for (long long price : to_buy_prices) { if (current_batch_sum > 0 && current_batch_sum + price >= P[0]) { transaction(current_batch_sum); current_batch_sum = price; } else { current_batch_sum += price; } } if (current_batch_sum > 0) { transaction(current_batch_sum); } }
#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...