Submission #1275977

#TimeUsernameProblemLanguageResultExecution timeMemory
1275977sphoabinh1980Souvenirs (IOI25_souvenirs)C++20
0 / 100
13 ms332 KiB
#include "souvenirs.h"
#include <vector>
#include <algorithm>
#include <cctype>
using namespace std;

void buy_souvenirs(int N, long long P0) {
    // Mảng lưu giá P[0..N-1]; P[0] đã biết
    vector<long long> P(N);
    P[0] = P0;

    // Bước 1: Xác định P[1] đến P[N-1]
    // Duyệt từ loại N-1 trở về loại 1
    for (int i = N - 1; i >= 1; --i) {
        // Thử M từ 1 đến P0 - 1
        for (long long M = 1; M < P0; ++M) {
            auto res = transaction(M);
            const vector<int>& bought = res.first;
            // Kiểm tra xem có mua được loại i không
            if (!bought.empty() && bought[0] == i) {
                // Vì xét từ loại 0 → N-1, và M < P[0],
                // nên nếu mua được loại i, thì đây là loại đầu tiên (rẻ nhất) được mua
                // → và vì M nhỏ nhất, nên M == P[i]
                P[i] = M;
                break;
            }
            // Nếu mua loại < i → nghĩa là P[i] > M → tiếp tục thử M lớn hơn
            // Nếu mua loại > i → không thể xảy ra vì i là loại đang xét và P giảm dần
        }
    }

    // Bước 2: Mua đúng số lượng: i món loại i (với i = 1..N-1)
    for (int i = 1; i < N; ++i) {
        for (int cnt = 0; cnt < i; ++cnt) {
            // Gửi đúng P[i] xu → chỉ mua được 1 món loại i
            transaction(P[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...