Submission #1249538

#TimeUsernameProblemLanguageResultExecution timeMemory
1249538Charizard2021Souvenirs (IOI25_souvenirs)C++20
7 / 100
12 ms420 KiB
#include "souvenirs.h"
#include<bits/stdc++.h>
using namespace std;
void buy_souvenirs(int N, long long P0){
    if(N == 2){
        pair<vector<int>, long long> res = transaction(P0 - 1);
        return;
    }
    else if(N == 3){
        pair<vector<int>, long long> res = transaction(P0 - 1);
        if((int)res.first.size() == 1){
            long long B = P0 - 1 - res.second;
            pair<vector<int>, long long> res2 = transaction(B - 1);
            pair<vector<int>, long long> res3 = transaction(B - 1);
        }
        else{
            long long sum = P0 - 1 - res.second;
            long long thing = sum/2;
            pair<vector<int>, long long> res2 = transaction(thing);
            pair<vector<int>, long long> res3 = transaction(thing);
        }
    }
    else{
        map<long long, long long> mp;
        long long cur = P0;
        for(int i = 1; i < N; i++){
            if(mp.find(i) != mp.end() && mp[i] == i){
                continue;
            }
            if(i == N - 1){
                cur--;
                pair<vector<int>, long long> res = transaction(cur);
                sort(res.first.begin(), res.first.end());
                reverse(res.first.begin(), res.first.end());
                if(res.first[0] == i){
                    for(long long x : res.first){
                        mp[x]++;
                    }
                    for(int j = 0; j < i - mp[i]; j++){
                        pair<vector<int>, long long> res2 = transaction(cur);
                    }
                }
                return;
            }
            cur -= 2;
            pair<vector<int>, long long> res = transaction(cur);
            sort(res.first.begin(), res.first.end());
            reverse(res.first.begin(), res.first.end());
            if(res.first[0] == i){
                for(long long x : res.first){
                    mp[x]++;
                }
                for(int j = 0; j < i - mp[i]; j++){
                    pair<vector<int>, long long> res2 = transaction(cur);
                }
            }
            else{
                for(long long x : res.first){
                    mp[x]++;
                }
                cur++;
                for(int j = 0; j < i - mp[i]; j++){
                    pair<vector<int>, long long> res2 = transaction(cur);
                }
            }
        }
    }
}
#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...