Submission #1285246

#TimeUsernameProblemLanguageResultExecution timeMemory
1285246ecen30Souvenirs (IOI25_souvenirs)C++20
0 / 100
13 ms400 KiB
//This is ChatGPT code. I am using this website to test different AI's and their abilities to solve IOI problems. Please understand. I do not mean to cheat. Just trying to get a good grade on my science project.

#include <vector>
#include <iostream>
#include <algorithm>
#include <utility>

using namespace std;

// The transaction function provided by the grader
extern pair<vector<int>, long long> transaction(long long M);

void buy_souvenirs(int N, long long P0) {
    // Initialize the prices array where we know the first price
    vector<long long> prices(N, 0);
    prices[0] = P0;  // The price of the most expensive souvenir is known

    // Deduce the prices for souvenirs 1 to N-1 using binary search

    for (int i = 1; i < N; i++) {
        long long low = 1, high = P0 - 1; // We know that P[i] < P[0] and P[i] >= P[N-1]
        long long price = -1;

        // Binary search to find the correct price for prices[i]
        while (low <= high) {
            long long mid = (low + high) / 2;
            auto [L, R] = transaction(mid); // Perform the transaction with mid coins

            // If the return amount is 0, it means we exactly bought souvenirs of type i
            if (R == 0) {
                price = mid;
                break;
            }

            // Adjust the search range based on the coins returned
            if (R > 0) {
                high = mid - 1; // The price is too high, adjust the upper bound
            } else {
                low = mid + 1; // The price is too low, adjust the lower bound
            }
        }
        
        // We should have found the price of souvenir type i
        prices[i] = price;
    }

    // Now that we know the prices, simulate buying the souvenirs
    vector<int> souvenirs_count(N, 0);

    // For each souvenir type i, we need to buy exactly i souvenirs of that type
    for (int i = 1; i < N; i++) {
        for (int j = 0; j < i; j++) {
            long long coins_needed = prices[i];

            // Perform a transaction to buy one souvenir of type i
            auto [L, R] = transaction(coins_needed);
            souvenirs_count[i] += L.size(); // Count how many of type i we bought
        }
    }

    // Output the result: number of souvenirs bought for each type
    for (int i = 0; i < N; i++) {
        cout << souvenirs_count[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...