Submission #1285554

#TimeUsernameProblemLanguageResultExecution timeMemory
1285554SmuggingSpunSouvenirs (IOI25_souvenirs)C++20
100 / 100
15 ms408 KiB
#include "souvenirs.h" #include<bits/stdc++.h> using namespace std; typedef long long ll; const int lim = 105; int n, cnt[lim]; ll cost[lim]; void MyLinh(ll money){ vector<int>item; ll remain; tie(item, remain) = transaction(money); for(int& i : item){ cnt[i]++; } while(item.size() > 1){ if(cost[item.back()] != -1){ remain += cost[item.back()]; item.pop_back(); } else{ MyLinh((money - remain) / item.size()); } } cost[item[0]] = money - remain; if(item[0] != n - 1 && cost[item[0] + 1] == -1){ MyLinh(cost[item[0]] - 1); } } void buy_souvenirs(int N, ll p0){ if((n = N) == 2){ transaction(p0 - 1); return; } if(n == 3){ vector<int>item; ll remain; tie(item, remain) = transaction(p0 - 1); if(item.size() == 1){ transaction(p0 - remain - 2); transaction(p0 - remain - 2); } else{ transaction((p0 - 1 - remain) >> 1LL); } return; } memset(cnt, 0, sizeof(cnt)); memset(cost, -1, sizeof(cost)); MyLinh((cost[0] = p0) - 1); for(int i = 1; i < n; i++){ for(int j = i; j > cnt[i]; j--){ transaction(cost[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...