제출 #1257601

#제출 시각아이디문제언어결과실행 시간메모리
1257601Canuc80kSouvenirs (IOI25_souvenirs)C++20
0 / 100
1 ms412 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

std::pair<std::vector<int>, long long> transaction(long long M);

ll res[101], cnt[101], tmp[101];

void buy_souvenirs(int n, long long p) {
    memset(res, 0x3f, sizeof res);
    res[0] = p;

    for (int i = 1; i < n; i ++) {
        res[i] = min({res[i], 3 * res[i - 1] / 4});
        if (i != 1) res[i] = min(res[i], res[i - 2] / 2);

        for (int j = cnt[i] + 1; j <= i; j ++) {
            tmp[i] = res[i]; 
            for (int k = i + 1; k < n; k ++)
                tmp[k] = tmp[k - 1] / 2;

            // cout << "???: " << i << ' ' << res[i] << endl;
            auto [v, x] = transaction(res[i]);
            for (auto x: v) {
                cnt[x] ++;
                if (tmp[x] < res[i]) res[i] -= tmp[x];
            }
            res[i] -= x;

            // cout << "Buy: " << res[i] << endl;
            // for (auto x: v) cout << x << ' '; cout << endl;
            // cout << "Rem: " << x << endl;
            // cout << "Tmp: " << endl;
            // for (int k = i; k < n; k ++) cout << i << ' ' << tmp[k] << endl;
        }
    }

    // for (int i = 0; i < n; i ++) cout << res[i] << ' '; cout << endl;
}
#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...