Submission #1249791

#TimeUsernameProblemLanguageResultExecution timeMemory
1249791thabumi선물 (IOI25_souvenirs)C++20
25 / 100
11 ms412 KiB
#ifdef EVAL
#include "souvenirs.h"
#endif
#include <bits/stdc++.h>
using namespace std;
#ifndef EVAL
pair<vector<int>, long long> transaction(long long M);
#endif
void buy_souvenirs(int N, long long P0) {
    if (N == 2) {
        transaction(P0 - 1);
        return;
    }
    if (N == 3) {
        auto [v, x] = transaction(P0 - 1);
        if (v.size() == 2) {
            long long sum = P0 - 1 - x;
            transaction(sum / 2);
        }
        else {
            long long P1 = P0 - 1 - x;
            transaction(P1 - 1);
            transaction(P1 - 1);
        }
        return;
    }
    pair<vector<int>, long long> ans;
    // int cur = 1;
    // int cnt = 0;
    // long long cur_q = P0 - 1;
    // while (true) {
    //     ans = transaction(cur_q);
    //     if (!(ans.second == 0 && ans.first.size() == 1 && ans.first[0] == cur)) {
    //         break;
    //     }
    //     cnt++;
    //     if (cnt == cur) {
    //         cur++;
    //         cnt = 0;
    //         cur_q--;
    //         if (cur == N) {
    //             return;
    //         }
    //     }
    // }
    vector<long long> price(N);
    price[0] = P0;
    bool found_last = false;
    int cnt_last = 0;
    for (int i = 1; i < N - 1; i++) {
        ans = transaction(price[i - 1] - 1);
        if (ans.first.size() == 2) {
            price[N - 1] = 1;
            cnt_last++;
            price[i] = price[i - 1] - 2;
        }
        else {
            if (ans.second == 0) {
                price[i] = price[i - 1] - 1;
            }
            else {
                price[i] = price[i - 1] - 2;
            }
        }
        for (int j = 2; j <= i; j++) {
            transaction(price[i]);
        }
    }
    if (found_last) {
        for (int i = cnt_last + 1; i < N; i++) {
            transaction(1);
        }
    }
    else {
        for (int i = 1; i < N; i++) {
            transaction(price[N - 2] - 1);
        }
    }
}
#ifndef EVAL
pair<vector<int>, long long> transaction(long long M) {
    return {{}, M};
}
#endif
#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...